即使数据库中没有数据,也不会显示错误消息

时间:2014-09-07 12:56:09

标签: php mysql pdo

参考此主题:Display error message if value not found mysql

我试图了解实现它的正确方法是什么,我当前的代码显示了数据库查询的结果,但是当我把一些不在数据库中的值时,它只是没有' t显示错误消息或任何php编码错误。

这是我的php代码:

error_reporting(E_ALL); ini_set('display_errors', 1);
require_once 'dbconnect.php';

$name = $_POST['name'];

try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT *
              FROM customer
              WHERE lname  LIKE :name OR
                    fname LIKE :name OR
                    number LIKE :name";

$q = $conn->prepare($sql);
    $q->execute(array('name' => $name));
    $q->setFetchMode(PDO::FETCH_ASSOC);

} catch (PDOException $pe) {
    die("Could not connect to the database $dbname :" . $pe->getMessage());
}

这是我的html视图:

            <tbody>
            <?php
            $cs = $q->fetchAll();
            if ( $cs === FALSE ) {
                 echo "The search of $name return no result";
            } else {
            foreach($cs as $r): ?>
            <tr>
                <td><a href="profile.php?name=<?php echo htmlspecialchars($r['slug']) ?>"><?php echo htmlspecialchars($r['fname']), ' ', htmlspecialchars($r['lname']) ?></a></td>
                <td><?php echo htmlspecialchars($r['number']) ?></td>
                <td><a href="profile.php?name=<?php echo htmlspecialchars($r['slug']) ?>">View Profile</a></td>
            </tr>
            <?php endforeach;
            } ?>
        </tbody> 

请告知我哪里出错了?

1 个答案:

答案 0 :(得分:2)

从技术上讲,查询本身没有任何失败,因此 fetchAll()不会返回false。当你运行一个没有返回结果的查询时,它会做什么,返回一个空数组。

在这种情况下,您可以将if语句更改为:if ($cs === false || empty($cs)) {。或者,您可以使用if (!$cs) {来允许PHP解释假值,例如空数组。

来源:PDOStatement::fetchAll()