WHERE子句中的PDO bindparam(?)阻止DATATABLE分页

时间:2019-01-03 17:16:11

标签: sql pdo datatable datatables

我正在将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而不是(?)无效,我必须将其绑定。

谢谢!

1 个答案:

答案 0 :(得分:0)

对于带有数组的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();