目前我很难理解为什么我用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错误;但没有回来。
我错过了什么,或者只是恨我?
答案 0 :(得分:0)
php日志中是否有错误?我认为问题可能是因为直接使用$_SESSION['id']
- 首先尝试创建变量,如
$id=$_SESSION['id'];
$stmt->bind_param('s',$id);
答案 1 :(得分:0)
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']);
答案 2 :(得分:0)
更改
$msgs = '<span style="color: yellow;">'.$result->num_rows.'</span>';
到
$msgs = '<span style="color: yellow;">' . $msgs . '</span>';
答案 3 :(得分:0)
试试这个:
$stmt = $db->prepare('SELECT * FROM mail WHERE userID = ? AND opened = 0');
if($stmt)
{
$stmt->bind_param(1,$_SESSION['id']);
$stmt->execute();
$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>';