如何使用PDO检查数据库中是否存在行?

2022-08-30 13:18:11

我想要一个条件,当行根本不存在时执行某些操作。

$stmt = $conn->prepare('SELECT * FROM table WHERE ID=?');
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

尝试过,但没有一个工作。if (count($row) == 0)if($stmt->rowCount() < 0)


答案 1

您可以直接检查返回值。

$stmt = $conn->prepare('SELECT * FROM table WHERE ID=?');
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

if( ! $row)
{
    echo 'nothing found';
}

/*
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // Same here
if( ! $rows)
{
    echo 'nothing found';
}
*/

如果您询问在不获取的情况下进行检查,那么只需让MySQL返回一个(或使用命令)。1COUNT()

$sql = 'SELECT 1 from table WHERE id = ? LIMIT 1';
//$sql = 'SELECT COUNT(*) from table WHERE param = ?'; // for checking >1 records
$stmt = $conn->prepare($sql);
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();

if($stmt->fetchColumn()) echo 'found';

答案 2
if($stmt->rowCount() == 0) 

应该可以正常工作,因为行数在任何情况下都不能小于零。

从手册中:

对于大多数数据库,不返回受语句影响的行数。相反,请使用 发出与预期语句具有相同谓词的语句,然后用于检索将返回的行数。然后,您的应用程序可以执行正确的操作。PDOStatement::rowCount()SELECTPDO::query()SELECT COUNT(*)SELECTPDOStatement::fetchColumn()

我建议在这里阅读。


推荐