-2

我正在执行以下查询。如果我将数字直接放入查询中,查询会返回大量结果......现在如果我使用 bindParam 传递值,则没有结果。

我已经测试了传递的值是否具有值,并且回显表明它们确实存在......所以我不知道为什么会这样

谁能告诉我我做错了什么?

 public function searchWithPagination( $startPage = 0, $numberResultsPerPage = 10 ) {

$q = $this->db->prepare( 'SELECT * FROM ecm LIMIT :startpage, :numberresultsperpage' );
$q->bindParam(':startpage', $startPage);
$q->bindParam(':numberresultsperpage', $numberResultsPerPage);
$q->execute();
echo $numberResultsPerPage . $startPage ;
$f = $q->fetchAll();
var_dump($f);
}

编辑:试过PDO::PARAM_INT还是不行

4

4 回答 4

1

尝试使用 bindValue 而不是 bindParam。在用户提交的 PHP 手册 (php.net/manual/en/pdostatement.bindvalue.php) 中的注释中,有一条关于 bindParam 通过引用传递的注释,而 bindValue 没有。

于 2013-06-13T11:03:56.397 回答
0

正如另一个问题/答案中所述:

如何在 LIMIT 子句中应用 bindValue 方法?

您需要将参数显式绑定为 INT,还应将它们转换为整数。

$q->bindParam(':numberresultsperpage', (int)$numberResultsPerPage, PDO::PARAM_INT);
于 2013-06-13T10:58:44.927 回答
0

限制参数必须绑定为整数,默认绑定是字符串。

$q->bindParam(':startpage', $startPage, PDO::PARAM_INT);
$q->bindParam(':numberresultsperpage', $numberResultsPerPage, PDO::PARAM_INT);
于 2013-06-13T10:55:26.843 回答
0

问题出在你的问题上。

在实际运行的代码中,您正在绑定常量值

$q->bindParam(':startpage', 0);
$q->bindParam(':numberresultsperpage', 10);

这会导致您提到的错误:

Cannot pass parameter 2 by reference

但是在您在这里发布的代码中,您正在绑定变量

$q->bindParam(':startpage', $startPage);
$q->bindParam(':numberresultsperpage', $numberResultsPerPage);

如果输入PDO::PARAM_INT或关闭仿真代码,它可以正常工作。

于 2013-06-13T11:10:10.427 回答