PDO简单SELECT - 使用foreach时如何处理无结果

时间:2016-04-13 20:53:30

标签: php pdo

我正在慢慢学习PHP并使用PDO。

看这里: https://phpdelusions.net/pdo#foreach

它说:

  

从语句中获取多行的最基本和最直接的方法是foreach()循环。由于Traversable接口,可以使用foreach()运算符迭代PDOStatement:

$stmt = $pdo->query('SELECT name FROM users');
foreach ($stmt as $row)
{
    echo $row['name'] . "\n";
}

我如何更改代码以检查没有结果,因为我无法弄清楚如何做到这一点?

我意识到如果SQL没有返回任何记录,那么foreach不会输出任何内容,但是我希望对某些内容进行某种检查。回声“没有找到记录”。

3 个答案:

答案 0 :(得分:3)

您不需要复杂的代码。假设您已在异常模式下设置PDO,并且您知道如何捕获错误,那么您的代码基本上就变成了一个单一的

$results = $pdo->query("SELECT name FROM users")->fetchAll(PDO::FETCH_ASSOC);

if(count($results)) 
{
    // You have records.
}

您甚至可以跳过计数部分直接进入

foreach($results as $row) ....

如果数组是空的,foreach将不会做任何事情。

答案 1 :(得分:-1)

如果你仍然想使用foreach方法,你可以在循环中设置一个标志,然后检查它是否存在以输出你的“无记录”信息。

$stmt = $pdo->query('SELECT name FROM users');
foreach ($stmt as $row)
{
    echo $row['name'] . "\n";
    $found_rows = true;
}
if (!isset($found_rows)) echo "No records found."; 

答案 2 :(得分:-2)

$sql = 'SELECT name FROM users';

$stmt = $db->prepare($sql);  // $db is your database connection object from PDO constructor
$stmt->execute();

$res = $stmt->fetchAll();

if ($res) {
    foreach ...
} else {
    // no records
}

    // if (!$res === false) {
        // failure
    // } elseif (count($res) < 1) {
        // no records
    // } else {
       // at least one record
       // loop
    // }

我个人会使用prepare()和execute()以及fetch()/ fetchAll()