「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP で MySQL のプリペアドステートメントを効果的に使用するにはどうすればよいですか?

PHP で MySQL のプリペアドステートメントを効果的に使用するにはどうすればよいですか?

2024 年 12 月 21 日に公開
ブラウズ:190

How to Effectively Use Prepared Statements in MySQL with PHP?

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 クエリを作成できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3