您可以直接检查返回值。
$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');
}
*/
如果你问有关检查并不获取然后只需有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');
['$ stmt-> rowCount时()'](http://php.net/manual/en/pdostatement.rowcount.php)应是你需要的,但检查它是否*小于*'0'不会有帮助 - 它将*等于*'0'或*小于*'1' – DaveRandom 2012-08-15 18:05:29
@DaveRandom文档声明并非所有的驱动程序导致'SELECT'给出'rowCount'。显然你应该使用'columnCount'。 – 2012-08-15 18:07:43
@arxanas一个公平点,但坦率地说,只是为了获得行数(如手册所示)而运行两个查询是一个糟糕的解决方案。即使'rowCount = count($ rows = $ stmt-> fetchAll())'是比这更好的解决方案,我觉得 - 如果没有行,它仍然会导致“0”。 – DaveRandom 2012-08-15 18:13:41