我有一个奇怪的问题,一直在踢我的背后。
我有以下代码:
$today = date("m/d/Y");
$sql = "SELECT * FROM msgs WHERE is_errata = 0 AND kill_date >= '$today' AND msg_date <= '$today' ORDER BY msg_date";
$ps = $pdo->prepare($sql);
if (!$ps) {
echo "PDO::errorInfo():";
print_r($pdo->errorInfo());
}else{
$ps->execute();
$number_of_rows = $ps->rowCount();
当我显示$ number_of_rows的值时,它总是显示-1,即使我得到结果。
其他人有这个问题吗?
哦,我使用的数据库不是MySQL,而是可爱的MS Access。我怀疑这可能是问题所在。
答案 0 :(得分:2)
rowCount()
方法不返回SELECT
语句中的行数。这是一个常见的错误。
PDOStatement :: rowCount()返回受影响的行数 最后由相应的DELETE,INSERT或UPDATE语句执行 PDOStatement对象。 如果关联的PDOStatement执行的最后一个SQL语句是 一个SELECT语句,一些数据库可能会返回行数 由该声明返回。但是,无法保证此行为 适用于所有数据库,不应依赖于便携式数据库 应用
您可以在documentation中找到更多详细信息。
因此要获得行数,必须使用sql SELECT
函数编写COUNT(*)
语句。在你的情况下:
$sql = "SELECT COUNT(*) AS `count` FROM msgs WHERE is_errata = 0 AND kill_date >= '$today' AND msg_date <= '$today' ORDER BY msg_date";
或使用PHP:
$number_of_rows = count($ps->fetchAll());
您还应该学会以正确的方式准备查询
答案 1 :(得分:-1)
您应该使用iterator_count
计算行数,即
$number_of_rows = iterator_count($ps);