PDO:无法传递变量来准备[重复]
Posted
技术标签:
【中文标题】PDO:无法传递变量来准备[重复]【英文标题】:PDO: could not pass variable to prepare [duplicate] 【发布时间】:2012-06-09 17:19:44 【问题描述】:可能重复:php PDO bindValue in LIMIT
$number=8;
try
$topics=$dbh->prepare("SELECT * FROM topictable ORDER BY RAND() LIMIT ?");
$topics->execute(array($number));
$topicarray = $topics->fetch(PDO::FETCH_BOTH);
print_r($topicarray);
catch(PDOException $e)
echo $e->getMessage();
以上是我的代码,我知道问题来自$topics=$dbh->prepare("SELECT * FROM topictable ORDER BY RAND() LIMIT ?")
,因为当我更改时?到8,它的工作原理。请赐教。谢谢。
【问题讨论】:
因为LIMIT
不能这样设置。此外,您的 SQL 根目录中存在更大的问题:read more here
@tereško 感谢您的文章。但是,是否有适当的方法将数字传递给 PDO 中的限制?
嘿@tereško,我修改了你给出的代码,结果出现了一些新问题。你介意来here to help me a bit?
【参考方案1】:
$topics=$dbh->prepare("...LIMIT :limit");
$topics->bindValue(':limit', intval($number), PDO::PARAM_INT);
$topics->execute();
【讨论】:
如果您将其绑定为PDO::PARAM_INT
,则不需要强制转换值
bugs.php.net/bug.php?id=44639 PDO 在将其转换为字符串时仍然存在问题。最好先确定它是一个 int。
“这只发生在模拟参数绑定上,即当 PDO::ATTR_EMULATE_PREPARES 为 TRUE 时。”。如果您不知道如何正确使用 PDO,也许您应该阅读教程。没有半脑的人在使用模拟准备。以上是关于PDO:无法传递变量来准备[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 LIKE 和绑定值的 PDO 准备语句未找到任何结果 [重复]