2013-06-13 105 views
-2

我正在做下面的查询。如果我把数字直接放入查询中,查询将返回很多结果...现在,如果我使用bindParam传递值,则不会有结果。当使用PDO :: 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仍然不起作用

+0

改为尝试bindValue。在用户在PHP手册中提交的注释(http://www.php.net/manual/en/pdostatement.bindvalue.php)中有关于bindParam传递引用的注释。 – GarethL

+0

首先,PDO :: PARAM_INT ** [does work](http://stackoverflow.com/a/15991623/285587)**。其次,[PDO查询失败,但我看不到任何错误。如何从PDO获取错误消息?](http://stackoverflow.com/a/15990858/285587) –

+0

@GarethL使它工作!谢谢。请将其发布为答案 –

回答

0

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

+0

只是bindValue没有工作。由于某种原因,我还必须包含类型cast(int)$变量。您可能需要将您的答案改为完全符合要求 –

0

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

$q->bindParam(':startpage', $startPage, PDO::PARAM_INT); 
$q->bindParam(':numberresultsperpage', $numberResultsPerPage, PDO::PARAM_INT); 
+0

也尝试过。它不工作 –

0

正如它在另一个提问/回答指出:

How to apply bindValue method in LIMIT clause?

你需要明确为INT的绑定参数,可以也应该扮演他们作为整数。

$q->bindParam(':numberresultsperpage', (int)$numberResultsPerPage, PDO::PARAM_INT); 
+0

我试过了,我得到另一个错误,说'不能通过参考传递参数2' –

+0

另一个评论说它取决于PHP版本,即5.3你应该使用(intval)。你也应该使用bindValue –

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或者如果emu语言代码关闭。