php pdo查询不使用数组

时间:2013-06-26 22:23:52

标签: php mysql pdo

我一直这样做了很多疑问,但突然发现一个不起作用的地方。这是我的代码:

$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

3 个答案:

答案 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)

您需要使用绑定值将值绑定到使用没有参数执行的查询!

http://php.net/manual/en/pdostatement.bindvalue.php

答案 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();
}