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']));
解释代码
检索数据
准备好语句后,您可以执行它、检索数据并迭代结果:
$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中文网其他相关文章!