2011-04-10 123 views
2

希望有人能夠幫助我,因爲我整夜都在試圖解決這個小問題。PDO沒有插入到數據庫中

我想插入數據到數據庫使用PDO(我承認,不是最瞭解)。我正在使用過去多次使用過的聲明,但由於某種原因,這次無法使​​用。聲明如下:

$userID = "Johnny5"; 
$sql = "INSERT INTO user_info(user_id) VALUES(:user-id)"; 
     if($stmt = $this->_db->prepare($sql)) 
     { 
      $stmt->bindParam(":user-id", $userID, PDO::PARAM_STR); 
      $stmt->execute(); 
      $stmt->closeCursor(); 
      return TRUE; 
     } else { 
      return FALSE; 
     } 

但不幸的是這總是返回TRUE而沒有輸入任何內容到我的數據庫。我嘗試了所有我能想到的聲明的組合變化,但我仍然處於虧損狀態。

我希望有人可以指出我犯的一個非常簡單的錯誤。

此外,在參數:user-id$sql字符串周圍放置單引號是我可以獲得任何內容出現在數據庫中的唯一方式,但顯然不會將任何實際數據輸入到數據庫中。

編輯 我也改變了PDO參數類型從PDO::PARAM_STRPDO::PARAM_INT但仍然沒有運氣。

經過進一步調查,​​正在返回FALSE

解決方案 感謝大家的指導。 @Nabeel說在PDO參數中不使用佔位符是正確的。

+0

PDOStatement-> bindParam返回TRUE或FALSE的成功失敗。 PDOStatement-> execute在成功時返回TRUE,在失敗時返回FALSE。您可以通過檢查返回值來找出哪個命令失敗。 – hakre 2011-04-10 11:09:43

+0

您是否嘗試過放置:error_reporting(E_ALL); ini_set('display_errors',1);在腳本的頂部? – teuneboon 2011-04-10 11:10:01

+0

@hakre我已經確定execute()的失敗似乎是 – ServAce85 2011-04-10 11:19:25

回答

4

不要在SQL語句中使用破折號。

使此:

:user-id 

就象這樣:

:userid 
+0

我終於能夠使用錯誤報告引導我得出同樣的結論。如果只有你早點來過@Nabeel。哦,好,從來沒有比從未更好:) – ServAce85 2011-04-10 11:53:43

+0

我希望我能在你發佈你的問題後一直在這裏。 – Nabeel 2011-04-10 11:58:59

0

$userId是這段代碼中的一個字符串,但是您可以通過定義PDO::PARAM_INT來表示它在int中。嘗試用PDO::PARAM_STRING替換它或嘗試將$userId設置爲一個數字(例如1)

+0

對不起,這是我嘗試的另一件事 - 最初我將參數設置爲str,我將在上面進行編輯以反映這一點。接得好。 – ServAce85 2011-04-10 11:08:06

0

如果出現問題,那麼肯定有錯誤。首先,您需要通過檢查它們的返回值來找出哪個語句失敗(總是先閱讀您在PHP手冊中使用的每個命令)。

如果您找到哪個命令失敗,請使用PDOStatement->errorInfo來了解有關具體錯誤的更多信息。

該信息應該可以幫助您解決問題。

更新:如果你要處理的異常(如佩卡建議):How to squeeze error message out of PDO?

+0

感謝您的指導。希望我能解決這個問題。如果問題得到解決,我會發布 – ServAce85 2011-04-10 11:24:49

+0

@ ServAce85 - 我相信你會盡快解決它。 – hakre 2011-04-10 11:29:43