MySQL でのプリペアド ステートメントの入門
プリペアド ステートメントは、安全で効率的な SQL クエリを作成するために不可欠なツールです。この記事では、PHP の MySQLi 拡張機能である mysqli でプリペアド ステートメントを使用する方法を説明します。
構文エラー: 非オブジェクト実行
発生するエラー, 「致命的なエラー: 非オブジェクトのメンバー関数execute() の呼び出し」は通常、$stmt 変数が適切に初期化されていない、またはオブジェクト。これを修正する方法は次のとおりです。
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
続行する前にデータベースへの有効な接続があることを確認してください。
バインディング パラメータ
プリペアド ステートメントパラメータ マーカー (? など) を使用して入力値を表します。これらの値は、ステートメントを実行する前に PHP 変数にバインドする必要があります。以下に例を示します。
$name = 'one'; $age = 1; $stmt->bind_param('si', $name, $age);
この例では、name パラメータを文字列 ('s') としてバインドし、age パラメータを整数 ('i') としてバインドします。
ステートメントの実行
パラメーターがバインドされたら、準備されたステートメントを実行できますステートメント:
$stmt->execute();
エラーの処理
準備されたステートメントは、直接 SQL クエリよりも優れたエラー処理を提供します。 mysqli_stmt::error メソッドを使用して、エラー メッセージを取得します。
if ($stmt->error) { die("Error: " . $stmt->error); }
完全な例
エラーの挿入、選択、および処理の完全な例を次に示します。
// Establish connection $mysqli = new mysqli("localhost", "root", "root", "test"); // Prepare and bind parameters $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); $stmt->bind_param('si', $name, $age); // Insert multiple rows $name = 'one'; $age = 1; $stmt->execute(); $name = 'two'; $age = 2; $stmt->execute(); // Prepare and execute select statement $stmt = $mysqli->prepare("SELECT * FROM users"); $stmt->execute(); // Bind result $result = $stmt->get_result(); // Process results while ($row = $result->fetch_assoc()) { echo $row['name'] . ", " . $row['age'] . "
\n"; } // Handle errors if ($stmt->error) { die("Error: " . $stmt->error); }
準備されたステートメントを使用すると、SQL インジェクション攻撃を防ぎ、より堅牢で効率的な SQL を作成できます。クエリ。
以上がPHP で MySQL のプリペアドステートメントを効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。