-1

我正在执行类似这样的代码:

// 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

我不明白。

4

2 回答 2

1

bindParam方法是错误的,它需要一个变量或变量名。您想bindValue改用它,它需要您使用的文字值。

手册参考:

于 2013-02-21T13:30:40.067 回答
1

某些数据库可能会返回 SELECT 语句返回的行数。但是,不能保证所有数据库都可以使用此行为,因此不应依赖 . 手动您可以使用COUNT(*)andfetchColumn()如下查询来模拟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
}
于 2013-02-21T19:20:08.670 回答