PHPでMySQLデータベースを操作する場合、 MySQLI拡張機能はクエリ結果を取得するさまざまな方法を提供します。しかし、多くの開発者は、これら2つを一緒に使用できるかどうか疑問に思っていますか?より柔軟な役割を果たすために組み合わせることができますか?この記事では、それらの違いと組み合わせの使用法が例で詳細に詳細に説明されています。
mysqli_result :: fetch_column
この方法は、結果セットから指定された列の単一の値を取得し、その列の単一のデータを返すために使用されます。通常、特定の列の値のみが必要な場合、メモリとコードの複雑さを保存するために使用されます。
mysqli_fetch_assoc
この関数は、結果セットのデータの行を返し、連想配列の形式で提示されます。配列のキー名はフィールド名で、複数のデータの列を取得するのに便利です。
簡単に言えば、 fetch_columnはデータの列を1つ取得し、 fetch_assocは行全体に関連するデータの配列を取得します。
技術的な観点から、 mysqli_result :: fetch_columnはmysqli_resultクラスの方法であり、 mysqli_fetch_assocはプロセス指向の関数であり、本質的に2つの異なる動作スタイルに属します。
オブジェクト指向のスタイルを使用している場合:
$ result-> fetch_assoc()や$ result-> fetch_column()などの方法は均一に使用する必要があります。
プロセス指向のスタイルを使用している場合:
mysqli_fetch_assoc($ result)を使用する必要があり、手続きスタイルにはfetch_column対応する関数がありません。
したがって、同じ結果セットで交互に直接呼び出すことはできません。そうしないと、データカーソルの混乱を引き起こします。
データベース内のユーザーテーブルユーザーを照会し、フィールドID 、名前、電子メールを使用して、データを取得する2つのメソッドを実証するとします。
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
// 接続を確認してください
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);
if ($result) {
// 使用fetch_assocデータの各行を取得します
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row['id'] . ",名前: " . $row['name'] . ",郵便: " . $row['email'] . "<br>";
}
$result->free();
}
// クエリをもう一度実行します
$result2 = $mysqli->query($sql);
if ($result2) {
// 使用fetch_column最初の列を取得します(id)
while (($id = $result2->fetch_column(0)) !== null) {
echo "ユーザーID: " . $id . "<br>";
}
$result2->free();
}
$mysqli->close();
?>
上記の例では、2つのクエリを実行して、それぞれfetch_assocとfetch_columnを使用しました。これにより、結果セットカーソルの混乱の問題が回避されます。
FETCH_ASSOCを使用して最初に完全なデータを取得し、 fetch_columnを使用して列を取得する場合は、結果を配列にキャッシュして配列を操作することをお勧めします。
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);
$rows = [];
if ($result) {
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
$result->free();
}
// キャッシュからデータの列を取得します
$userIds = array_column($rows, 'id');
foreach ($userIds as $id) {
echo "ユーザーID: $id<br>";
}
$mysqli->close();
?>
これは効率的かつ便利であり、重複したクエリとカーソルの問題を回避します。
mysqli_result :: fetch_columnおよびmysqli_fetch_assocは、さまざまな操作スタイルに属し、直接使用することはできません。
両方を使用する場合は、クエリを個別に実行するか、 fetch_assocを使用してすべてを取得することをお勧めします。その後、PHPビルトイン関数を使用して指定された列を抽出します。
組み合わせて使用する場合は、結果を設定したカーソルステータスに注意して、データの読み取りの混乱を避けてください。
これら2つの方法を合理的に組み合わせることで、データベースデータを処理する際に、より柔軟で効率的にすることができます。