【问题标题】:Cannot select avatar from DB无法从数据库中选择头像
【发布时间】:2014-04-20 11:47:02
【问题描述】:

我的代码是这样的:

<?php
    $user=$_SESSION['username'];
    $avatar="SELECT us_avatar FROM all_users WHERE user_nick=?";
    $query=$bd->prepare($avatar);
    $query->bind_param('s',$user);
    $query->execute();
    $query->bind_result($img);
    $query->fetch();
echo '<img src="'.$img.'" alt="" />';
?>

错误是 - 致命错误:在我检查过的非对象上调用成员函数 bind_param() 是否 avatar 是保留关键字,但它不是。我试过“SELECT us_avatar FROM all_users WHERE user_nick=?”但它不起作用。字段和表的名称与数据库中的相同。更新后会出现该错误,如果我不进行更新,它会运行良好。

【问题讨论】:

  • $query 不是对象。但你把它当作一个。这会给您带来致命错误(并且是错误消息告诉您的内容)。请参阅Reference - What does this error mean in PHP? - 推荐阅读:How to get useful error messages in PHP?
  • 我将 $bd 包含在文件的顶部。一切正常。如果不是,我将无法登录。
  • @user3496946,我们怎么知道,除非你告诉那些事情?另外,我们找不到session_start();
  • 请注意,PDO::prepare() 可以在发生错误时返回 FALSE(取决于您使用的 PDO 错误处理的类型),因此您不能得到 @987654333 @ 作为返回类型(参见:php.net/manual/en/pdo.prepare.php)。但是您没有在代码中处理这种错误情况。因此,您会看到错误。您需要处理错误情况并让 PDO 告诉您错误是什么(在您的情况下,使用 PDO 异常而不是返回 FALSE 可能更方便)。见PDO error handlingphp.net/pdo.error-handling

标签: php select mysqli


【解决方案1】:

这样使用:

<?php
  $user=$_SESSION['username'];
  $query = $bd->prepare('SELECT us_avatar FROM all_users WHERE user_nick=?');
  $query->bind_param('s', $user);
  $query->execute();
  $query->bind_result($img);
  $query->fetch();
  echo "<img src='{$img}' alt='' />";
?>

【讨论】:

  • 如果我可以问,那应该如何防止非对象$query 的致命错误?
  • bind_param 作用于prepare函数而不是它的结果。
  • 对不起。还有另一种可能。如果您有 sql 语法错误,则发生此错误。检查您的选择语法。
  • 我认为选择语法没问题,当我加载页面时一些附加信息都正常或当我重新加载页面时,但是当我执行 mysqli 更新时显示错误。
  • 那你为什么向我们展示选择语法?你的更新语法呢?
猜你喜欢
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多