2

MySQLi、PDO 或 PHP 中是否有使用参数化查询但不准备稍后调用的 API?当我们不调用SQLParameter 的 .Prepare()方法时,我在 ADO.NET 中找到了它,但我在 PHP 中没有找到它。

4

1 回答 1

0

准备好的语句与查询分离的值一起发送到数据库服务器。如果您想获取 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普遍认为非常好,我个人一直在用。它的学习曲线很平缓,互联网上提供了许多教程。它的文档在这里

于 2011-04-30T11:35:40.017 回答