我有一个PDO,它在数据库中查询不存在的用户来处理用户注册。问题是,如果找不到用户,var_dump和print_r都不会打印任何内容。
customer
这里发生了什么?该页面只是空白。
php -l index.php不会出现语法错误,页面也不会抛出错误500.
视图来源中没有任何内容。
以下是连接详情:
try {
$stmt->execute();
while($row = $stmt->fetch()) {
var_dump($row);
print_r($row);
if($row = null) { // Not working
# if(!isset($row)) { // Not working
# if(empty($row)) { // Also not working
echo "User not found";
} else {
echo $row['realname']."<br>";
}
}
} catch(PDOException $e) {
echo "FATAL ERROR OCCURED:".$e->getMessage();
}
答案 0 :(得分:3)
它之所以不起作用,是因为你是&#34;分配&#34;在if($row = null)
中使用1个等号,而不是&#34;比较&#34; if($row == null)
有两个等号(或3&#34;如果相同&#34;,取决于你想要检查的内容)。
请参阅Stack上的The 3 different equals。
参考文献:
PHP看到&#34;赋值&#34;作为有效的语法,这就是为什么你没有收到任何错误。
答案 1 :(得分:1)
原来我必须重新组织一下代码。
我将$row = $stmt->fetch();
从while循环中取出,并单独检查$ row。像这样:
$stmt = $dbh->prepare("SELECT realname FROM users WHERE name = :name" );
$stmt->bindParam(":name", $name);
$name = "mivuckovaca"; // NOT IN DATABSE ON PURPOSE
try {
$stmt->execute();
} catch(PDOException $e) {
echo "FATAL ERROR OCCURED:".$e->getMessage();
}
$res = $stmt->fetchAll(); # Replaced fetch() with fetchAll()
if(empty($res)) {
echo "User not found";
} else {
foreach($res as $row) { # replaced while() with foreach()
echo $row['realname'];
}
}