MySQL拡張機能は、MySQLデータベース操作にPHPを使用する際に最も一般的に使用されるツールの1つです。特に、クエリを処理する場合、 mysqli_resultオブジェクト、 fetch_assoc()メソッドの組み合わせ、およびループは効率的かつ一般的なトラバーサル方法です。この記事では、それらを正しく使用する方法の詳細を説明し、考慮事項とサンプルコードを提供します。
mysqli_query()で選択クエリを実行すると、返された結果はmysqli_resultオブジェクトです。このオブジェクトには、クエリによって返されるデータのすべての行が含まれています。このデータにアクセスするには、 fetch_assoc()などの特別な方法を使用する必要があります。
fetch_assoc()は、 mysqli_resultが提供するメソッドです。結果セットから次の行を取り出し、連想配列を返すために使用されます。配列のキーはフィールド名で、値は対応するフィールド値です。各呼び出しは、 nullを返すことなく1行下に移動します。
一般的に言えば、 fetch_assoc()と組み合わせて、 whileループを使用して、結果セットのデータを線ごとに取得します。これは、fetch_assoc()が一度に1行ずつを返すだけで、すべての行を完了するために継続的な呼び出しが必要なためです。
サンプルコード:
<?php
// データベースに接続します
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 接続を確認してください
if ($mysqli->connect_error) {
die('接続に失敗しました: ' . $mysqli->connect_error);
}
// クエリを実行します
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);
if ($result instanceof mysqli_result) {
// トラバーサルクエリの結果
while ($row = $result->fetch_assoc()) {
echo 'ID: ' . $row['id'] . '<br>';
echo '名前: ' . $row['name'] . '<br>';
echo '郵便: ' . $row['email'] . '<br>';
echo '<a href="https://m66.net/user/' . $row['id'] . '">詳細を確認してください</a><br><br>';
}
// 結果セットをリリースします
$result->free();
} else {
echo 'クエリに失敗しました: ' . $mysqli->error;
}
// 接続を閉じます
$mysqli->close();
?>
?クエリが成功したかどうかを確認してください<br> $ result-> fetch_assoc()を呼び出す前に、 $ resultが実際にmysqli_resultオブジェクトであり、偽ではないことを確認してください。
?リリース結果セット<br> トラバーサルの後、 $ result-> free()を呼び出してリソースをリリースして、メモリの漏れを避けます。
?データベース接続を閉じます<br> データベースを使用した後、 $ mysqli-> close()を呼び出して接続を閉じます。
? SQL注入を防ぐ<br> ユーザー入力がクエリに関与している場合は、文字列を直接スプライシングする代わりに、プリプロセシングステートメント( prepare + bind_param )を使用することを強くお勧めします。