ホームページ >バックエンド開発 >PHPチュートリアル >mysqli プリペアド ステートメントが失敗するのはなぜですか? パラメータを適切にバインドするにはどうすればよいですか?
mysqli プリペアド ステートメントの使用
プリペアド ステートメントの開始
次のことを行おうとしていますプリペアドステートメントを利用していますが、コードでエラーが発生します。この問題は、準備されたステートメントにパラメーターをバインドするという手順が欠落していることが原因で発生します。
パラメーターのバインド
準備されたステートメントでは、実行前にパラメーターをバインドする必要があります。このプロセスでは、外部変数を SQL クエリ内のプレースホルダー (?) に関連付けます。
$name = 'one'; $age = 1; $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); // Bind parameters (typehint: string, integer) $stmt->bind_param('si', $name, $age); // Now you can execute $stmt->execute();
プリペアド ステートメントには mysqli が必要ですか?
はい、mysqli が必要です準備されたステートメントの場合。
Complete例
接続:
$mysqli = new mysqli("localhost", "root", "root", "test"); if ($mysqli->connect_errno) { echo "Connection failed: " . $mysqli->connect_error; }
挿入:
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); // Bind parameters (typehint: string, integer) $stmt->bind_param('si', $name, $age); // Insert row $stmt->execute();
エラーのある選択取り扱い:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE name = ?"); $stmt->bind_param('s', $name); $stmt->execute(); if ($stmt->errno) { echo "Error: " . $stmt->error; } else { $result = $stmt->get_result(); } // Process result
以上がmysqli プリペアド ステートメントが失敗するのはなぜですか? パラメータを適切にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。