首页 > 后端开发 > php教程 > 如何在 PHP 中使用准备好的语句从 MySQL 安全地检索数据?

如何在 PHP 中使用准备好的语句从 MySQL 安全地检索数据?

Susan Sarandon
发布: 2024-12-20 13:07:10
原创
388 人浏览过

How Can I Securely Retrieve Data from MySQL Using Prepared Statements in PHP?

在 PHP 中保护 MySQL 预准备语句

在 PHP 中使用 SQL 查询时,通过使用预准备语句来优先考虑安全性至关重要。以下是如何创建安全的预准备语句以使用 URL 参数的输入来检索列:

利用 MySQL 改进版 (MySQLi):

$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']));
$stmt->execute();

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

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

$stmt->close();
登录后复制

或者,您可以使用此辅助函数来简化关联数组的绑定:

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);
}
登录后复制

使用it:

$stmt->store_result();

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

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

性能增强

准备好的语句确实通过最大限度地减少重新解析和重新规划查询的需要来增强性能。但是,如果在单个页面上仅使用几次,对速度的影响可能并不显着。尽管如此,它仍然是提高安全性和防止 SQL 注入漏洞的推荐做法。

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

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