我现在很困惑,为什么我用PHP编写的一条语句不能正常工作。
代码如下:
$stmt = $db->prepare('SELECT * FROM mail WHERE userID = ? AND opened = 0');
if($stmt)
{
$stmt->bind_param('s',$_SESSION['id']);
$stmt->execute();
$stmt->store_result();
$msgs = $stmt->num_rows;
$stmt->close();
}
if($msgs > 0)
{
$msgs = '<span style="color: yellow;">'.$result->num_rows.'</span>';
}
echo ' <a href="mail?id='.$_SESSION['id'].'"><img src="img/'.$mailico.'" alt="'.$mailstat.'" /> ('.$msgs.')</a>';基本上,它应该检查数据库中的表" mail“,并查看是否有任何PM已发送给登录的用户,尚未打开,如果是,则在邮件图标旁边的括号中显示用户有多少新消息。
问题是,当我在表中为该用户打开一个未打开的消息时,它不会用消息的数量更新新的消息字段,并且是空白的(根本没有数字)。
我用mysqli_error($db)检查了mysql错误;但是什么也没有返回。
我错过了什么,还是它恨我?
发布于 2017-05-21 14:50:11
改变
$msgs = '<span style="color: yellow;">'.$result->num_rows.'</span>';至
$msgs = '<span style="color: yellow;">' . $msgs . '</span>';发布于 2017-05-21 14:45:27
php日志中是否有错误?我认为这个问题可能是因为直接使用了$_SESSION['id'] --首先尝试将其创建为一个变量,如下所示
$id=$_SESSION['id'];
$stmt->bind_param('s',$id);发布于 2017-05-21 14:48:21
bind_param()需要参数名称或参数索引。所以你应该像这样写代码
$stmt = $db->prepare('SELECT * FROM mail WHERE userID = ? AND opened = 0');
$stmt->bind_param(1,$_SESSION['id']);或者
$stmt = $db->prepare('SELECT * FROM mail WHERE userID = :user_id AND opened = 0');
$stmt->bind_param(':user_id',$_SESSION['id']);https://stackoverflow.com/questions/44093897
复制相似问题