2014-02-28 55 views
0

我開始使用PDO在PHP/MySQL的它的多個數據庫的支持,但由於某種原因,一個查詢不斷產生的錯誤信息:PDOStatement對象執行SQLSTATE無效參數號

$account_email = '[email protected]'; 

$statement = $pdo->prepare("SELECT id FROM account WHERE account_email = :email"); 
$statement->execute(array(':email' => $account_email)); 

警告:PDOStatement對象::執行(): SQLSTATE [HY093]:無效的參數編號:綁定變量的數量不符令牌

對於利益着想的數量我想實現它的其他方式,並把它扔到了同樣的錯誤:

$statement = $pdo->prepare("SELECT id FROM account WHERE account_email = ?"); 
$statement->execute(array($account_email)); 

我已經做了相當多的研究,顯然PDO是格式化挑剔的。有沒有PDO不喜歡這個查詢?間距?

僅供參考:我已閱讀了大部分StackOverflow的其他問題。有時候人們在數組中有額外的參數,有時候會出現錯字,有些語法錯誤不會產生錯誤,但仍會影響參數的數量。在這種情況下,一切似乎都很完美

+2

它看起來好像沒什麼問題。這是您的腳本的確切副本,還是您在複製到SO時進行更改?在實際的代碼中可能有一個錯字。 – Barmar

+0

出於安全原因,除了更改電子郵件地址之外,它將進行復制和粘貼。另一個有趣的事情是我有一個插入語句(用於日誌記錄)正上方,它工作正常,它遵循完全相同的格式。 我也在$ account_email之後立即回顯並暫停腳本,以確保所有值都正確傳遞給腳本。他們都很好。我無法把頭圍住它。 – OrangeFrog

+0

你有沒有在腳本中調用'bindParam'或'bindValue'? – Barmar

回答

1

你不必在一個數組來傳遞,特別是對於只有一個參數,試試這個:

$account_email = '[email protected]'; 

$statement = $pdo->prepare("SELECT id FROM account WHERE account_email = :email"); 
$statement->bindParam(':email', $account_email); 
$statement->execute(); 
+0

感謝您的答案美達 - 我正在使用包裝類,但我不想例外。我仍然沒有想出一個解決方法。 – OrangeFrog

+1

順便說一下,您的解決方案是我在這種情況下使用的解決方案,因此我將其標記爲可接受的答案。仍然愛知道爲什麼這不起作用 - 我最好的猜測是一個錯誤。我幾乎消除了其他所有選項。 – OrangeFrog

相關問題