0

mysqli_*PHPの古い関数の代わりに関数を使い始めまし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
}

コードは次の 2 つのエラーを返します。

警告: mysqli::prepare(): C:\Users\Grega\Server\application\inc\classes\APIConnect.php 行 136 で MySQL を取得できませんでした

致命的なエラー: 137 行目の C:\Users\Grega\Server\application\inc\classes\APIConnect.php の非オブジェクトに対するメンバー関数 execute() の呼び出し

「MySQL をフェッチできませんでした」の理由は何ですか? データベース接続は正しく、他のクラスでも機能し、クエリをエコーし​​てphpMyAdminで実行すると、有効な結果が返されます。また、私の変数の名前はmysqlNOT mysqli!

4

1 に答える 1

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()

于 2012-10-13T13:01:50.840 に答える