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 查询。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3