我正在执行与此类似的代码:
// 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
我不明白。
答案 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
}