2014-01-10 1509 views
-1

我知道這個問題已被問了很多次,但從我看過的很多人看來,他們總是使用mysql保留的關鍵字作爲表或列名,或者實際上在這裏或那裏有語法錯誤,但我不認爲我也有,所以我會很感激一些幫助,弄清楚爲什麼我會得到這個。下面是導致該錯誤的功能:爲什麼我會得到「SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤...」? (PDO-PHP)

public function user_exists($db, $username) { 
    $query = $db->prepare("SELECT COUNT('id') FROM 'users' WHERE 'username' = ?"); 
    $query->bindValue(1, $username); 

    try { 
     $query->execute(); 
     $rows = $query->fetchColumn(); 

     if($rows == 1) { 
      return false; 
     } 
     else { 
      return true; 
     } 
    } 
    catch(PDOException $e) { 
     die($e->getMessage()); 
    } 
} 

然後,當它被稱爲有,比方說,「什麼」爲$ username參數,下面是完整的錯誤,我得到:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQLsyntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users' WHERE 'username'= anything' at line 1 

回答

3

使用反引號逃脫表或列名稱,而不是引號。

SELECT COUNT(`id`) FROM `users` WHERE `username` = ? 
+0

這工作。謝謝! – which1ispink

2

使用反引號:

變化

"SELECT COUNT('id') FROM 'users' WHERE 'username' = ?" 

"SELECT COUNT(`id`) FROM `users` WHERE `username` = ?" 
相關問題