首页 > 后端开发 > 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); }
登录后复制

通过使用prepared statements,可以防止SQL注入攻击,写出更健壮、更高效的SQL查询。

以上是如何通过 PHP 有效地使用 MySQL 中的预准备语句?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板