开始使用 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); }
通过使用prepared statements,可以防止SQL注入攻击,写出更健壮、更高效的SQL查询。
以上是如何通过 PHP 有效地使用 MySQL 中的预准备语句?的详细内容。更多信息请关注PHP中文网其他相关文章!