参考此主题: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>
请告知我哪里出错了?
答案 0 :(得分:2)
从技术上讲,查询本身没有任何失败,因此 fetchAll()不会返回false。当你运行一个没有返回结果的查询时,它会做什么,返回一个空数组。
在这种情况下,您可以将if语句更改为:if ($cs === false || empty($cs)) {
。或者,您可以使用if (!$cs) {
来允许PHP解释假值,例如空数组。