PHP MySQL编写的语句不起作用

时间:2017-05-21 06:37:32

标签: php mysql

目前我很难理解为什么我用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错误;但没有回来。

我错过了什么,或者只是恨我?

4 个答案:

答案 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>';