2012-10-13 87 views
0

我開始使用mysqli_*功能,而不是在PHP老mysql_*功能,和我有一個有點問題,這段代碼:的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 
} 

代碼返回這2個錯誤:

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

Fatal error: Call to a member function execute() on a non-object in C:\Users\Grega\Server\application\inc\classes\APIConnect.php on line 137

'無法獲取MySQL'的原因是什麼?數據庫連接是正確的,它在其他類中起作用,並且如果我在phpMyAdmin中執行它並執行它,查詢將返回一個有效結果。另外,我的變量名爲mysql不是mysqli

+0

這是**不**使用預準備語句的方式。你沒有準備任何東西。 – PeeHaa

+1

一個有用的鏈接:http://codular.com/php-mysqli – saji89

回答

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

+0

請添加關於命名綁定,例如':access_token'而不是'?'來覆蓋所有區域。 :) – saji89

+2

據我所知,與PDO不同,mysqli不支持命名綁定。 –

+0

感謝您解釋:: prepare方法,但這不能解決任何問題。我仍然得到相同的錯誤,也使用任何其他方法將返回相同的錯誤。 – ItsGreg