在尝试使用预准备语句时,开发人员遇到了挑战并收到错误“致命错误:调用成员函数执行() 在非物体上。”本文深入探讨了该问题的根本原因,并提供了有关在 Mysqli 中正确使用 prepared statements 的全面指南。
问题是由于省略参数绑定而产生的在执行准备好的语句之前。 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中文网其他相关文章!