我一直这样做了很多疑问,但突然发现一个不起作用的地方。这是我的代码:
$q = 'SELECT title FROM blog LIMIT :paging,:perpage';
$v = array(
':paging'=>(($page-1)*$perpage),
':perpage'=>$perpage
);
$sql = $conn->prepare($q);
$sql->execute($v);
if ($sql){
foreach($sql as $rs){
$title = $rs['title'];
echo '<article>'.$title.'</article>';
};
};
我没有收到任何错误,但它也没有显示任何内容。当我取出$ v并将值放入查询时如下:
$q = 'SELECT title FROM blog LIMIT '.(($page-1)*$perpage).','.$perpage.' ';
这完美地运作并输出字段。
我在过去的许多其他查询中都做了同样的数组技巧,从来没有遇到任何问题。不知道我在这里做错了什么,需要一双新鲜的眼睛。
$ page = 1和$ perpage = 2
答案 0 :(得分:4)
因为当你使用一个数组执行时,它默认为PDO::PARAM_STR
,所以它认为它是一个字符串......这显然不能很好地与LIMIT
而是使用bindValue
,这样您就可以明确说明PDO::PARAM_INT
$q = 'SELECT title FROM blog LIMIT :paging,:perpage';
$sql = $conn->prepare($q);
$sql->bindValue(':paging',(($page-1)*$perpage), PDO::PARAM_INT);
$sql->bindValue(':perpage',$perpage, PDO::PARAM_INT);
$sql->execute();
答案 1 :(得分:3)
您需要使用绑定值将值绑定到使用没有参数执行的查询!
答案 2 :(得分:-1)
您没有收到任何PHP错误,但您根本没有检查SQL错误。您需要显式检查SQL错误。
try {
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}