PDO在SELECT语句后返回错误的rowCount()

时间:2013-02-21 13:16:44

标签: php sqlite pdo

我正在执行与此类似的代码:

// first select
$query = $link->prepare("
            SELECT id FROM table
            WHERE name = ?;"); 

$param = 'foo';

$query->bindParam(1, $param); // should return 1 row
$query->execute();
echo $query->rowCount(); // displays 0 (??????)

其他例子:

// second select
$query = $link->prepare("
            SELECT id FROM table
            WHERE name = ?;"); // should return 0 rows

$param = 'bar';

$query->bindParam(1, $param);
$query->execute();
echo $query->rowCount(); // displays 1 (?????)

我的表:

id | name
---------
1  | foo

我不明白。

2 个答案:

答案 0 :(得分:1)

bindParam方法是错误的,它需要变量或变量名称。您希望使用bindValue代替,它需要您使用的字面值。

手动参考:

答案 1 :(得分:1)

某些数据库可能会返回SELECT语句返回的行数。但是,并不保证所有数据库都会出现此行为,因此不应依赖此行为。Manual您可以使用COUNT(*)fetchColumn(),如以下查询中模拟rowCount()

$query = $link->prepare("SELECT COUNT(*) FROM table  WHERE name = ?");
$param = 'bar';
$query->bindParam(1,$param);
$query->execute();
// Check the number of rows that match the SELECT statement 
if($query->fetchColumn() == 0) {
    echo "No records found";
 }else{
        $query = $link->prepare("SELECT id FROM table WHERE name = ?")
        //Etc
}