使用 LIMIT 子句传递 PDO 参数数组
简介:
使用 PDO 时,同时传递参数数组和使用 LIMIT 子句可能具有挑战性。本文提供了此问题的解决方案。
问题陈述:
给出以下 SQL 查询:
SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2
您想要执行此操作使用参数数组进行查询,如下所示:
$stmt->execute($array);
但是,对 LIMIT 参数(:limit1 和 :limit2)使用 bindParam() 方法会导致错误。
解决方案:
解决方案在于禁用 PDO::ATTR_EMULATE_PREPARES 的默认 PDO 设置。此设置本质上指示 PDO 模拟准备好的语句,而不是在本机使用它们。
要禁用此设置:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
禁用此设置后,可以使用以下命令准备和执行查询参数数组,包括 LIMIT 值:
$stmt = $pdo->prepare($sql); $stmt->execute(array(5)); //works!
含义:
禁用 PDO::ATTR_EMULATE_PREPARES 可以提高性能,因为它消除了模拟准备好的开销声明。但需要注意的是,由于性能原因,此设置默认启用。
其他资源:
以上是如何解决 PDO 中使用 LIMIT 子句传递数组参数时出现的错误?的详细内容。更多信息请关注PHP中文网其他相关文章!