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 准备语句未找到任何结果 [重复]

SELECT PDO 准备好的语句中的 SELECT [重复]

PDO - 使用准备好的语句[重复]

从 PDO 准备好的语句中获取查询 [重复]

使用 PDO 准备好的语句插入致命错误 [重复]

如何查看准备好的 PDO SQL 语句 [重复]