【问题标题】:PDO bindparam (?) in WHERE clause block DATATABLE pagingWHERE 子句块数据表分页中的 PDO 绑定参数 (?)
【发布时间】:2019-01-03 17:16:11
【问题描述】:

我将 Datatable 与 PDO 一起使用,但我对这个 where 子句有疑问:

$orderBy=" ORDER BY dayofweek>=1 DESC, dayofweek ASC, starttime ASC ";

$sql="SELECT SQL_CALC_FOUND_ROWS op.*
    FROM ophours op
    WHERE op.memberid IN (?)
    $orderBy
    LIMIT ?,? ; ";
$res=pdoquery($sql, array($shopids, (int)$_GET['iDisplayS'], (int)$_GET['iDisplayL']));

如果我删除WHERE op.memberid IN (?) 行并从绑定参数中删除$shopids,则分页将再次起作用。 如果我不这样做,我只能得到第一页的结果。如果我尝试加载更多结果,则会收到错误 500。 我几乎可以肯定问题来自WHERE X IN (?)

你知道替换这条线的方法吗?直接放 $shopids 而不是 (?) 不行,我必须绑定它。

谢谢!

【问题讨论】:

    标签: sql pdo datatable datatables


    【解决方案1】:

    对于带有数组的 in 子句,您应该通过吗?数组中的元素数量

      $in  = str_repeat('?,', count($shopids) - 1) . '?';
      $sql="SELECT SQL_CALC_FOUND_ROWS op.*
        FROM ophours op
        WHERE op.memberid IN ($in)
        $orderBy
        LIMIT ?,? ; ";
      $stm = $db->prepare($sql);
      $stm->execute($arr,(int)$_GET['iDisplayS'], (int)$_GET['iDisplayL']);
      $res = $stm->fetchAll();
    

    【讨论】:

    • 首先感谢您的回答。它继续以这种方式工作,但在分页上继续前进是行不通的。如果我要显示 12 个数据,并且每页打印 10 个,则在第二页上打印 2 个数据会给我一个错误。如果我有 26 个数据也是一样,第三页不断向我发送错误 500。
    猜你喜欢
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2013-06-08
    • 2012-01-27
    相关资源
    最近更新 更多