在 PHP 中创建安全的 MySQL 准备语句
如果您是使用 MySQL 准备语句的 PHP 初学者,您会偶然发现需要安全地从列中检索数据。为了实现这一目标,让我们深入了解准备好的语句的世界,确保查询的安全。
揭开有漏洞的查询
您当前的 SQL 语句虽然简单,在安全性方面存在缺陷:
$qry = "SELECT * FROM mytable where userid='{$_GET['userid']}' AND category='{$_GET['category']}'ORDER BY id DESC";
这种方法使您的应用程序容易受到 SQL 注入攻击,恶意用户可以在其中进行操作使用特殊字符进行查询。
制作安全的准备语句
要免疫您的查询,让我们使用准备好的语句:
$stmt = $db->prepare("SELECT * FROM mytable WHERE userid=? AND category=? ORDER BY id DESC");
This语句使用占位符(“?”)来表示输入参数。然后,我们将这些参数安全地绑定到实际值:
$stmt->bind_param('ii', intval($_GET['userid']), intval($_GET['category']));
通过单独绑定数据,我们可以防止恶意字符更改我们的查询。
性能优化
您对准备好的语句对性能的影响感到好奇。虽然它们可以为单次执行提供边际效益,但在页面或循环中多次执行时,它们真正发挥作用。
准备好的语句会缓存查询计划,从而无需在每次运行时解析和编译它。此优化可以显着提高速度,特别是对于复杂查询。
提取关联数组
对于返回多列的查询,您可以使用以下函数自动绑定到关联数组:
function stmt_bind_assoc (&$stmt, &$out) { ... }
此实用程序简化了使用 SELECT 返回的数组的过程* 查询。
结论
准备好的语句对于保护 MySQL 查询和防止 SQL 注入攻击至关重要。通过实施它们,您可以保护您的应用程序并在多次执行相同查询时享受性能优化。利用准备好的语句的力量来实现安全、高效的数据访问。
以上是如何使用 PHP 准备语句从 MySQL 安全地检索数据?的详细内容。更多信息请关注PHP中文网其他相关文章!