Php PDO simple SELECT-如何在使用foreach时处理无结果

Php PDO simple SELECT-如何在使用foreach时处理无结果,php,pdo,Php,Pdo,我正在慢慢地学习PHP,正在使用PDO 看看这里: 它说: 从语句中获取多行的最基本和最直接的方法是foreach()循环。由于有了可遍历的接口,PDO语句可以通过使用foreach()运算符进行迭代: 如果我不知道怎么做,我该如何更改代码以检查是否没有结果 我意识到,如果SQL没有返回任何记录,foreach就不会输出任何内容,但我更愿意进行某种检查,例如回显“未找到任何记录”。$SQL='SELECT name FROM users'; $stmt=$db->prepare($sql);/

我正在慢慢地学习PHP,正在使用PDO

看看这里:

它说:

从语句中获取多行的最基本和最直接的方法是foreach()循环。由于有了可遍历的接口,PDO语句可以通过使用foreach()运算符进行迭代:

如果我不知道怎么做,我该如何更改代码以检查是否没有结果

我意识到,如果SQL没有返回任何记录,foreach就不会输出任何内容,但我更愿意进行某种检查,例如回显“未找到任何记录”。

$SQL='SELECT name FROM users';
$stmt=$db->prepare($sql);//$db是PDO构造函数中的数据库连接对象
$stmt->execute();
$res=$stmt->fetchAll();
如果($res){
foreach。。。
}否则{
//没有记录
}
//如果(!$res==false){
//失败
//}elseif(计数($res)<1){
//没有记录
//}其他{
//至少一条记录
//环路
// }

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

这不需要复杂的代码。假设您已将PDO设置为异常模式,并且您知道如何捕获错误,那么您的代码基本上变成了一行程序

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

if(count($results)) 
{
    // You have records.
}
你甚至可以跳过计数部分,直接进入

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

如果数组为空,foreach将不会执行任何操作。

如果仍要使用
foreach
方法,可以在循环内设置一个标志,然后检查其是否存在,以输出“无记录”消息


谢谢你的回答。我只是测试查看,即使SQL没有返回任何结果(例如,从用户中选择名称,其中email='sillytest'),如果我做一个简单的检查,那么$stmt=true。当SQL确实返回数据时,它也会返回true。@JayBlanchardL:这也不正确……谢谢@MacGyer-我如何在不包含任何参数的简单SQL上使用prepare()?是否仅准备用于参数化查询?否。。。你可以准备一切。如果不存在参数,则可能超出上限。但是,如果在开发过程中必须更改语句,该怎么办?我编辑了答案
$results = $pdo->query("SELECT name FROM users")->fetchAll(PDO::FETCH_ASSOC);

if(count($results)) 
{
    // You have records.
}
foreach($results as $row) ....
$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.";