加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – fetchall()之后的PDO fetchObject().返回假

发布时间:2020-12-13 21:50:31 所属栏目:PHP教程 来源:网络整理
导读:我是 PHP的新手. 我试图以表格的形式显示员工的详细信息. 但是($row = $result- fetchObject())部分没有执行,因为$result- fetchObject()返回false.它与$rows = $result- fetchAll();?有关吗? 这是代码片段. $sql = "SELECT id,name,designation FROM empl
我是 PHP的新手.
我试图以表格的形式显示员工的详细信息.
但是($row = $result-> fetchObject())部分没有执行,因为$result-> fetchObject()返回false.它与$rows = $result-> fetchAll();?有关吗?
这是代码片段.

$sql = "SELECT id,name,designation FROM employees";

if ($result = $pdo->query($sql)) {
    $rows = $result->fetchAll();
    $num_rows = count($rows);

    if ($num_rows > 0) {
        echo "<table>n";
        echo " <tr class="heading">n";
        echo " <td>ID</td>n";
        echo " <td>Name</td>n";
        echo " <td>Designation</td>n";    
        echo " </tr>n";

        while($row = $result->fetchObject()) {
            echo " <tr>n";
            echo " <td>" . $row->id . "</td>n";
            echo " <td>" . $row->name . "</td>n";
            echo " <td>" . $row->designation . "</td>n";
            echo " </tr>n";
        }
        echo "</table>";
    } else {
        echo "No employees in database.";
    }

else {
    echo "ERROR: Could not execute $sql. " . print_r
    ($pdo->errorInfo());
}

解决方法

PDO的文档有点令人困惑,但是当没有更多行可用于返回时,PDOStatement::fetch()方法及其表兄fetchAll()返回false.文档说它在失败时返回false,缺少可用行计为失败.

您对fetchAll()的初始调用将获取PDOstatement结果对象中的所有行,并且fetchObject()调用不再需要检索,因此返回false.

您只需要初始调用fetchAll(),但如果之前没有为连接设置默认提取类型,则可能需要将其提取类型设置为PDO :: FETCH_OBJ.

然后,您可以在已有的$rows数组上使用简单的foreach循环替换while循环.这样做的另一个好处是可以将显示逻辑与数据库查询业务逻辑分开一点:

if ($result = $pdo->query($sql)) {
    // Fetch them now,as objects
    $rows = $result->fetchAll(PDO::FETCH_OBJ);
    $num_rows = count($rows);

    if ($num_rows > 0) {
        echo "<table>n";
        echo " <tr class="heading">n";
        echo " <td>ID</td>n";
        echo " <td>Name</td>n";
        echo " <td>Designation</td>n";    
        echo " </tr>n";

        // $rows now has everything you need,just loop over it
        foreach ($rows as $row {
            echo " <tr>n";
            echo " <td>" . htmlspecialchars($row->id) . "</td>n";
            echo " <td>" . htmlspecialchars($row->name) . "</td>n";
            echo " <td>" . htmlspecialchars($row->designation) . "</td>n";
            echo " </tr>n";
        }
        echo "</table>";
    } else {
        echo "No employees in database.";
    }

else {
    echo "ERROR: Could not execute $sql. " . print_r
    ($pdo->errorInfo());
}

另请注意,我在将输出写入HTML时添加了对htmlspecialchars()的调用.总是建议使用,以便像<< > &安培;在HTML中具有特殊含义的编码是正确编码的,如果这些值来源于用户输入,则可以避免跨站点脚本漏洞.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读