”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何通过 PHP 有效地使用 MySQL 中的预准备语句?

如何通过 PHP 有效地使用 MySQL 中的预准备语句?

发布于2024-12-21
浏览:958

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); }

通过使用准备好的语句,您可以防止 SQL 注入攻击并编写更健壮、更高效的 SQL 查询。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3