開発者はプリペアド ステートメントを利用しようとして課題に遭遇し、「致命的なエラー: メンバー関数の呼び出し実行」というエラーを受け取りました。 () オブジェクトではないものについて。」この記事では、この問題の根本原因を詳しく掘り下げ、Mysqli でプリペアド ステートメントを適切に使用するための包括的なガイドを提供します。
この問題は、パラメーター バインディングの省略から発生します。準備されたステートメントを実行する前に。 Mysqli では、ステートメントを実行する前に、mysqli_stmt_bind_param() 関数を介してパラメーターをアプリケーション変数にバインドする必要があります。
1.パラメータバインディング:
$name = 'one'; $age = 1; $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); // bind parameters. Refer to documentation for appropriate data types (e.g., 'si' for string and integer). $stmt->bind_param('si', $name, $age);
2.ステートメントの実行:
$stmt->execute();
3.後続のパラメータ バインドと実行:
異なる値を持つ複数の行を挿入するには、各実行前にパラメータ バインド ステップを繰り返す必要があります。
例:
$name = 'two'; $age = 2; // Update bound parameters $stmt->bind_param('si', $name, $age); // Execute with different values $stmt->execute();
4.完全な例:
$mysqli = new mysqli("localhost", "root", "root", "test"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli->connect_error; } $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); try { // Insert one row $name = 'one'; $age = 1; $stmt->bind_param('si', $name, $age); $stmt->execute(); // Insert another row with different values $name = 'two'; $age = 2; $stmt->bind_param('si', $name, $age); $stmt->execute(); } catch (Exception $e) { echo "Error: " . $e->getMessage(); }
以上がMysqli プリペアド ステートメントを使用すると「致命的エラー: 非オブジェクトのメンバー関数execute() の呼び出し」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。