PHP開発では、データベース操作にMySQLI拡張機能を使用することが非常に一般的です。 mysqli_result :: fetch_column関数は、クエリ結果から単一の列データを抽出するための簡単な方法ですが、実際に使用すると、多くの開発者はデータの複製の問題に遭遇します。この記事では、この現象に応じて複製データの原因を分析し、誰もがこの問題を回避するのに役立つ効果的なソリューションとサンプルコードを提供します。
データベースクエリステートメントの不適切な設計<br> 多くの場合、データの複製の根本原因は、別個の使用を使用しないなど、SQLクエリ自体、または関連付けクエリ中のテーブル接続条件エラーがデータの複製を引き起こすなどです。
データ抽出方法エラー<br> fetch_columnを使用する場合、データがループで不合理に処理されている場合、出力が繰り返される可能性もあります。
データキャッシュまたはループロジック欠陥<br> アレイに保存された後にデータが正しく複製されない場合、またはループトラバーサルロジックに問題がある場合、重複を引き起こします。
最も直接的で効率的な方法は、SQLステートメントで補償することです。
$sql = "SELECT DISTINCT column_name FROM table_name WHERE conditions";
$result = $mysqli->query($sql);
これにより、すべてのデータが返された結果セットで一意になることが保証されます。
fetch_column現在の行にデータの列のみを抽出します。ループと呼ぶ場合は、行ごとにデータを取得できますが、次のことに注意する必要があります。
重複した呼び出しが出力を重複させないことを確認してください。
結果セットを適切に解放または再利用しないことを避けてください。
データベースレイヤーが一意性を確保できない場合、PHPレイヤーは配列重複排除を使用できます。
$data = [];
while ($value = $result->fetch_column()) {
$data[] = $value;
}
$data = array_unique($data); // 重複した値を削除します
複製データを回避する方法を示す完全な例を次に示します。
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_errno) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
// 使用DISTINCT複製データを避けてください
$sql = "SELECT DISTINCT user_email FROM users WHERE status = 'active'";
$result = $mysqli->query($sql);
if ($result) {
$emails = [];
while ($email = $result->fetch_column()) {
$emails[] = $email;
}
// 再度重量を除去してください(防ぐSQL声明は機能しません)
$emails = array_unique($emails);
foreach ($emails as $email) {
echo $email . "<br>";
}
$result->free();
} else {
echo "クエリに失敗しました: " . $mysqli->error;
}
$mysqli->close();
?>
SQLを設計するときは、個別に重複排除を使用することが推奨されます。
FETCH_COLUMNは、行で単一の列データを抽出し、合理的に呼び出します。
PHPサイドは、二次重複排除方法としてarray_uniqueを使用します。
意図しない複製行を避けるために、関連するクエリとデータ構造を確認してください。
上記の手法により、 mysqli_result :: fetch_columnを使用する場合の複製データの問題を基本的に排除でき、コードの堅牢性とデータの精度を改善できます。