stmt

时间:2015-04-28 17:47:13

标签: php mysqli

我想绑定来自stmt中的准备查询的结果。但它给了我错误

  

调用成员函数bind_param

我们都知道这个明显的错误信息......我只是不知道为什么会出现这个错误...

这是我的php代码(会话已启动且所有行和列都正确)

$selectposts = "SELECT postby,posttxt,time,upvotes,downvotes FROM posts ORDER BY id DESC";
$stmt = $mysqli->prepare($selectposts);
$stmt->execute();
$stmt->bind_result($postby,$posttxt,$posttime,$upvotes,$downvotes);
while($stmt->fetch()){
   $picturestmt = $mysqli->prepare("SELECT picture FROM members WHERE username = ?");
        $picturestmt->bind_param('s', $postby);
        $picturestmt->execute();
        $picturestmt->bind_result($picture);
                        while($picturestmt->fetch()){
                                if(empty($picture)){
                                        $profpicturefromdb = " <img src='profile_pictures/public_icon.png' width='25' height='25' class='fxdmimg'>";
                                } else {
                                        $profpicturefromdb = " <img width='25' class='fxdmimg' height='25' src='profile_pictures/".$picture."' alt='Profile Picture'>";
                                }
                        }
}

此代码应将$ profpicturefromdb分配给图像。 (并且还从数据库中提取所有帖子,但那是另一个回声)

如果我回显$ postby,它会显示发布帖子的用户的姓名。没关系,但为什么不将它分配到"bind_param('s',$postby');? 感谢

1 个答案:

答案 0 :(得分:0)

完整错误是:

  

在非对象

上调用成员函数bind_param

这意味着当您致电时,$ picturestmt不是对象:

$picturestmt->bind_param('s', $postby);

正如您从var_dump($picturestmt)看到的那样: $ picturestmt false

因此,从技术上讲,我们可以看到false->bind_param正在产生错误。

你必须转向调试mysqli_prepare返回false的原因:

$picturestmt = $mysqli->prepare("SELECT picture FROM members WHERE username = ?");

可以使用 mysqli::error

来完成