使用PDO替代mysql_num_rows

use*_*294 20 php mysql pdo

现在我有一个PHP文件执行MYSQL查询,然后像这样计算行:

$count=mysql_num_rows($result);


if ($count == 1) {
    $message = array('status' => 'ok');
} else {
    $message = array('status' => 'error');
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我正在尝试更改我的所有PHP文件以使用PDO.那么如何用PDO完成这项工作呢?

Wol*_*Dev 21

$res = $DB->query('SELECT COUNT(*) FROM table');
$num_rows = $res->fetchColumn();
Run Code Online (Sandbox Code Playgroud)

要么

$res = $DB->prepare('SELECT COUNT(*) FROM table');
$res->execute();
$num_rows = $res->fetchColumn();
Run Code Online (Sandbox Code Playgroud)

您可以使用它来询问数据是否存在或被选中:

$res = $DB->query('SELECT COUNT(*) FROM table');
$data_exists = ($res->fetchColumn() > 0) ? true : false;
Run Code Online (Sandbox Code Playgroud)

或者使用您的变量:

$res = $DB->query('SELECT COUNT(*) FROM table');
$message = ($res->fetchColumn() > 0) ? array('status' => 'ok') : array('status' => 'error');
Run Code Online (Sandbox Code Playgroud)

  • 我错了还是你只会得到"下一行的第一栏"http://uk3.php.net/manual/en/pdostatement.fetchcolumn.php (3认同)
  • 是的,fetchcolumn() 返回行的第一列,相反,您需要使用 rowCount() (2认同)

小智 12

$stmt = $db->query('SELECT * FROM table');  
$row_count = $stmt->rowCount();  
echo $row_count.' rows selected';
Run Code Online (Sandbox Code Playgroud)

  • http://php.net/manual/en/pdostatement.rowcount.php 说:_如果关联的 PDOStatement 执行的最后一个 SQL 语句是 SELECT 语句,某些数据库可能会返回该语句返回的行数。但是,**不能保证所有数据库都具有此行为,并且不应依赖于可移植应用程序**._ (2认同)

pri*_*iki 5

也许你可以使用PDO的"fetchAll"方法,该方法返回一个包含所有SELECT结果的数组.然后使用"count"方法计算数组的行数.

例如:

$rows = $stmt->fetchAll();
$num_rows = count($rows);
Run Code Online (Sandbox Code Playgroud)

  • @QuinnComendant,`rowCount()` 函数仅在您获取所有行之后才返回准确计数。 (2认同)