ホームページ > バックエンド開発 > PHPチュートリアル > PHP で MySQL のプリペアドステートメントを効果的に使用するにはどうすればよいですか?

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

Linda Hamilton
リリース: 2025-01-02 16:14:39
オリジナル
172 人が閲覧しました

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

以上がPHP で MySQL のプリペアドステートメントを効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート