首页 > 数据库 > mysql教程 > 如何安全地使用 PHP 中的预准备语句来查询 MySQL 数据库?

如何安全地使用 PHP 中的预准备语句来查询 MySQL 数据库?

Barbara Streisand
发布: 2024-12-16 10:46:12
原创
804 人浏览过

How Can I Securely Use Prepared Statements in PHP to Query a MySQL Database?

PHP for MySQL 中的安全预准备语句

使用 MySQL 和 PHP 时,使用预准备语句对于确保数据库的安全至关重要查询。准备好的语句通过将 SQL 语句与用户提供的输入分开来防御 SQL 注入攻击。

创建安全的准备语句

要创建安全的准备语句,我们'将使用以下代码片段:

$db = new mysqli("host", "user", "pw", "database");
$stmt = $db->prepare("SELECT * FROM mytable where userid=? AND category=? ORDER BY id DESC");
$stmt->bind_param('ii', intval($_GET['userid']), intval($_GET['category']));
登录后复制

解释代码

  1. 创建连接:使用mysqli类创建MySQL连接对象($db)。
  2. 准备语句: 使用连接对象上的prepare()方法来准备SQL语句。占位符(?)代表稍后将被用户输入替换的参数。
  3. 绑定参数:使用bind_param()方法绑定用户提供的参数(在本例中为$_GET ['userid'] 和 $_GET['category']) 到准备好的占位符语句。

检索数据

准备好语句后,您可以执行它、检索数据并迭代结果:

$stmt->execute();
$stmt->store_result();
$stmt->bind_result($column1, $column2, $column3);

while ($stmt->fetch()) {
    echo "col1=$column1, col2=$column2, col3=$column3 \n";
}
登录后复制

关联数组方便

要将数据作为关联数组检索(例如,对于 SELECT * 查询),您可以使用以下函数:

function stmt_bind_assoc(&$stmt, &$out) {
    $data = mysqli_stmt_result_metadata($stmt);
    $fields = array();
    $out = array();

    $fields[0] = $stmt;
    $count = 1;

    while ($field = mysqli_fetch_field($data)) {
        $fields[$count] = &$out[$field->name];
        $count++;
    }
    call_user_func_array(mysqli_stmt_bind_result, $fields);
}
登录后复制

此函数允许您将结果绑定到关联数组,使您可以更轻松地使用code:

$stmt->store_result();

$resultrow = array();
stmt_bind_assoc($stmt, $resultrow);

while ($stmt->fetch()) {
    print_r($resultrow);
}
登录后复制

性能注意事项

虽然准备好的语句旨在提高性能,但在页面上使用几次可能不会产生显着的收益。但是,如果您的应用程序频繁执行数据库操作,准备语句可以显着缩短响应时间。

以上是如何安全地使用 PHP 中的预准备语句来查询 MySQL 数据库?的详细内容。更多信息请关注PHP中文网其他相关文章!

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