繁体   English   中英

PHP 中没有准备语句的参数化查询

[英]parameterized query without preparing statement in PHP

MySQLi、PDO 或 Z2FEC392304A5C23AC138DA2284 中是否有 API 或在 Z2FEC392304A5C23AC138DA228C 中准备召回该参数? 当我们不调用SQLParameter 的 .Prepare()方法时,我在 ADO.NET 中找到了它,但在 PHP 中没有找到它。

准备好的语句与查询分离的值一起发送到数据库服务器。 如果您想获取 ID 为 1337 的用户,请使用PDO执行此操作;

$sql = 'SELECT u.id, u.username FROM users u WHERE u.id = :theUserIdToGet LIMIT 1';
$stmt = $db->prepare($sql);
$stmt->bindValue(':theUserIdToGet', 1337);
$result = $stmt->fetch();

在传统查询中,这只是;

$sql = 'SELECT u.id, u.username FROM users u WHERE u.id = ' . 1337 . ' LIMIT 1';
$stmt = $db->query($sql);
$result = $stmt->fetch();

第一个示例显然需要更多代码,但它具有以下优点;

  • 安全性 - 值(在这种情况下只有一个;1337)单独发送到数据库服务器。 数据库服务器安全地检查这些值是否存在错误字符,并在执行前将它们插入到查询中。 请注意,一些查询 API 会模拟这一点,但它仍然提供了很大的安全性。
  • 可读性 - 当向查询添加多个参数时,如果连接字符串(“WHERE id =”。$var1。“AND”。$var2。“= 1”等)会变得非常混乱。
  • 性能(偶尔)- 确实,准备好的语句在执行多次时会快得多,但实际上这种情况很少见。 通过 query() 准备查询的性能开销可以忽略不计。

将变量插入查询时应始终使用准备好的语句,因为它们的易读性和安全性。

PDO一般认为是很好的,我个人一直在用。 它的学习曲线很平缓,互联网上提供了许多教程。 它的文档在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM