【问题标题】:mysql limit clause not working alongside php bindvalue [duplicate]mysql限制子句不能与php bindvalue一起工作[重复]
【发布时间】:2018-04-11 16:55:01
【问题描述】:

在尝试创建分页后,我注意到 PHPbindValue 在与 MySQLORDER BYLIMIT 子句一起使用时不起作用.

这很奇怪,因为它可以在 MySQL 中的任何其他地方工作(至少据我所知)。例如,这完全可以正常工作:

SELECT * FROM table WHERE foo = ? AND bar = ?

但是,当尝试以下操作时:

SELECT * FROM table ORDER BY date DESC LIMIT ?, ?

它将返回一个空对象。

这就是我执行查询的方式(请注意,这都是简化的,我使用的函数都是 class 的一部分):

// query function
function query($sql, $params){
    if($query = $pdo->prepare($sql)){
        $x = 1;
        if(count($params)){
            foreach($params as $param){
                $query->bindValue($x, $param);
                $x++;
            }
        }

        if($query->execute()){
            return $query->fetchAll(PDO::FETCH_OBJ);
        } else {
            return false;
        }
    }
}

// executing a query (this will return an empty object)
$query = query("SELECT * FROM table ORDER BY date DESC LIMIT ?, ?", array(0, 10));
var_dump($query);

似乎无法解决这个问题,因此感谢所有帮助,

干杯。

【问题讨论】:

  • @lolbas 我试过$query->bindParam($x, $param, PDO::PARAM_INT);(和PARAM_STR)无济于事。
  • 这不是链接答案所暗示的。
  • @lolbas 啊!你是对的,没有注意到&符号。会试一试:)

标签: php mysql


【解决方案1】:

您的参数将作为字符串包含在内。使用常量告诉 bindValue 将值绑定为 int。

$query->bindParam(2, $x, PDO::PARAM_INT);

【讨论】:

  • MySQL 可以很好地处理作为字符串传递的参数。这不太可能是问题的原因。
猜你喜欢
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 2011-02-11
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多