我正在慢慢学习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不会输出任何内容,但是我希望对某些内容进行某种检查。回声“没有找到记录”。
答案 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()