![](/img/trans.png)
[英]MySQL: How to return all rows in a table and count the amount of rows with matching ID from another table
[英]How do I count rows with matching id?
我目前在确定是否有任何行与特定用户ID匹配时遇到一些困难。 该代码运行良好,但是if语句(if($ notifs!== false)始终返回true,因此从不显示“未找到通知”。我如何编写该语句以仅检查与当前会话匹配的“ receive_id” ID?
$user_id = $_SESSION['userID'];
if(isset($_POST["view"]))
{
$stmt = $user_notif->runQuery("SELECT * FROM tbl_users WHERE userID=:uid");
$stmt->execute(array(":uid"=>$user_id));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt = $user_notif->runQuery("SELECT * FROM notif_follow WHERE receive_id= ? ORDER BY id DESC LIMIT 5");
$stmt->bindValue(1,$user_id);
$stmt->execute();
$notifs = $stmt->fetchAll(PDO::FETCH_ASSOC);
$notification = '';
if($notifs !== false)
{
foreach($notifs as $notif)
{
$send_id = $notif['send_id'];
$query2 = $user_notif->runQuery("SELECT id FROM following WHERE user1_id=:uid1 AND user2_id=:uid2");
$query2->execute(array(":uid1"=>$user_id,":uid2"=>$send_id));
$query2result = $query2->fetch(PDO::FETCH_ASSOC);
if($query2result !== false){
$follow .= '<a href="followoff.php?id='.$send_id.'"><button class="button">Remove Channel</button></a>';
}
else{
$follow .= '<a href="followon.php?id='.$send_id.'"><button class="button">Add Channel</button></a>';
}
$notification .= '
<li>
<div class="notifbox">
<strong style="color: #4b8ed3;">'.$notif["send_name"].'</strong><p style="color: #fff;"> has added you.</p>
'.$follow.'
 <a href="index.php?id='.$notif["send_id"].'"><button class="button">View Channel</button></a>
</div>
</li>
<div class="sectionheader3"></div>
';
}
}
else
{
$notification .= '<li><h2 style="color: #4b8ed3; padding: 10px;">No Notifications Found<h2></li>';
}
http://php.net/manual/en/pdostatement.fetchall.php说:
如果要获取的结果为零,则返回空数组;如果失败,则返回FALSE。
匹配零行的查询并非失败。 成功地为您提供了零匹配行的信息。
因此,您不应与$notifs !== false
进行比较,后者恰好与布尔值false
进行比较。 您可能要与以下内容进行比较:
if (!$notifs)
这还将测试空数组。
如果查询失败,则fetchAll
仅返回false
,但不会失败。 结果是一个数组。 最好检查count($notifs) > 0
以及$notifs === false
是否存在查询失败的可能性。
尝试
if ($stmt->RowCount() > 0) {
$notifs = $stmt->fetchAll(PDO::FETCH_ASSOC);
//code here
}
代替
$notifs = $stmt->fetchAll(PDO::FETCH_ASSOC);
if($notifs !== false) {
//code here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.