【问题标题】:mysqli::prepare(): Couldn't fetch MySQLmysqli::prepare(): 无法获取 MySQL
【发布时间】:2012-10-04 01:36:26
【问题描述】:

我开始在 PHP 中使用 mysqli_* 函数而不是旧的 mysql_* 函数,但这段代码有点问题:

public function addUser($table, $code = false, $rows = false) {
   if (!$code) {
      header("Location: " . $this->authenticate());
   } else {
      $this->getToken($code);
   }
   $user = $this->getEndpoint('users/current', false, true);
   $user = $user->response->user;
   if (!$rows)
        $rows = array(
            "remote_id" => $user->id,
            "firstName" => $user->first_name,
            "lastName" => $user->last_name,
            "photo" => $user->photo->medium,
            "gender" => $user->gender == 'male' ? 1 : 2,
            "email" => $user->contact->email,
        );
   $rows['access_token'] = $this->accessToken;
   $stmt = $this->mysql->prepare("SELECT id FROM users WHERE access_token = '{$this->accessToken}'"); //line 136
   $stmt->execute(); //line 137
}

代码返回这两个错误:

警告:mysqli::prepare(): Couldn't fetch MySQL in C:\Users\Grega\Server\application\inc\classes\APIConnect.php on line 136

致命错误:在 C:\Users\Grega\Server\application\inc\classes\APIConnect.php 第 137 行的非对象上调用成员函数 execute()

“无法获取 MySQL”的原因是什么?数据库连接是正确的,它在其他类中工作,并且查询返回一个有效的结果,如果我回显它并在 phpMyAdmin 中执行它。另外,我的变量名为mysql 而不是mysqli

【问题讨论】:

  • 不是使用准备好的语句的方式。你没有准备任何东西。
  • 一个有用的链接:codular.com/php-mysqli

标签: php mysqli


【解决方案1】:

您应该阅读更多关于 MYSQL 与 MYSQLi 之间的区别。

虽然您的代码是:

$stmt = $this->mysql->prepare("SELECT id FROM users WHERE access_token = '{$this->accessToken}'");

你应该这样做:

$stmt = $this->mysql->prepare("SELECT id FROM users WHERE access_token = ?");
$stmt->bind_param("s" , $this->accessToken ); //Used 's' as I guess that the accessToken is a string

binding 部分是prepare 事物的关键部分。 (您的查询是安全的)

之后你可以使用$stmt->execute();get_result()

【讨论】:

  • 请也添加有关命名绑定的信息,例如 :access_token 而不是 ? 以涵盖所有领域。 :)
  • 据我所知,mysqli不支持命名绑定,不像PDO。
  • 感谢您解释 ::prepare 方法,但这并不能解决任何问题。我仍然得到同样的错误,使用任何其他方法也会返回同样的错误。
  • @OfirBaruch,对不起。我的错。你是对的...PDO Vs Mysql
  • @GregaMenih ,您可以编辑您的问题并粘贴新代码吗?
猜你喜欢
  • 2013-11-25
  • 2012-02-14
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
相关资源
最近更新 更多