PDO/PHP - 检查行是否存在

xpe*_*tor 27 php pdo row

我希望有一个条件,因为行根本不存在.

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

试过if (count($row) == 0),if($stmt->rowCount() < 0)但没有一个有效.

Xeo*_*oss 64

您可以直接检查返回值.

$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)
{
    die('nothing found');
}

/*
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // Same here
if( ! $rows)
{
    die('nothing found');
}
*/
Run Code Online (Sandbox Code Playgroud)

如果您询问没有提取的检查,那么只需让MySQL返回1(或使用COUNT()命令).

$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()) die('found');
Run Code Online (Sandbox Code Playgroud)

  • 你的解决方案会起作用,但是`PDOStatement :: fetch`返回一个数组是不正确的.如果没有行,则返回下一个结果或"false".这就是为什么当存在空结果集时,'$ row`为false. (9认同)

Dan*_*ira 9

if($stmt->rowCount() == 0) 
Run Code Online (Sandbox Code Playgroud)

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

从手册:

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

我建议在这里阅读.

  • 哦,然后我使用了错误的标志.我想如果它确实存在的时候它更大,我应该把它反转到小于0!大声笑 (2认同)