PHPプリペアドステートメントの使い方
PHPではプリペアドステートメント機能を使ってSQLを実行することで、データベースのクエリ効率と安全性を向上させることができます。プリペアドステートメントを使用する一般的な手順を以下に説明します。
- データベース接続を作成します。まず、mysqliやPDOなどのデータベース拡張を使用してデータベース接続を作成します。
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
// 使用mysqli扩展创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 使用PDO扩展创建连接
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
- プレースホルダー(?)をパラメータに設定したSQL文を実行するprepare()メソッドを使って、準備された文を準備します。
$sql = "SELECT * FROM users WHERE id = ?";
// 使用mysqli扩展准备预处理语句
$stmt = $conn->prepare($sql);
// 使用PDO扩展准备预处理语句
$stmt = $conn->prepare($sql);
- バインドパラメータ:SQL文にパラメータが含まれている場合は、bind_param()またはbindParam()メソッドを使用して、パラメータ値をプレースホルダーにバインドします。
$id = 1;
// 使用mysqli扩展绑定参数
$stmt->bind_param("i", $id);
// 使用PDO扩展绑定参数
$stmt->bindParam(1, $id);
- 执行预处理语句:使用execute()方法执行预处理语句。
// 使用mysqli扩展执行预处理语句
$stmt->execute();
// 使用PDO扩展执行预处理语句
$stmt->execute();
- 結果を取得する:必要に応じて fetch()、fetchAll() などのメソッドを使用して、クエリ結果を取得します。
// 使用mysqli扩展获取结果
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// 处理每一行数据
}
// 使用PDO扩展获取结果
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
// 处理每一行数据
}
- プリペアードステートメントとデータベース接続をクローズする:close()メソッドを使用して、プリペアードステートメントとデータベース接続をクローズします。
// 使用mysqli扩展关闭预处理语句和连接
$stmt->close();
$conn->close();
// 使用PDO扩展关闭预处理语句和连接
$stmt = null;
$conn = null;
上記のサンプルコードは、mysqliとPDO拡張の使用例に基づいていますのでご注意ください。使用されるデータベース拡張によって具体的な実装は異なりますが、基本的な手順や考え方は共通です。