2012-02-29 40 views
0

我有一個奇怪的問題,我敢肯定,是因爲我不明白的MySQL的所有特質:(MySQL的:不能更新現有NULL值

我有一個具有一列的表默認值爲NULL,「TeamID」。當我添加一個新行而沒有給出該列的值時,它是NULL。Perfect。除了當我希望更新該行時,下面的代碼似乎沒有改變該值NULL(或甚至造成任何錯誤):

$STH = $this->_db->prepare("UPDATE UserDetails SET 
      TeamID = ':teamID' WHERE UserID = ':userID';"); 
    $STH->execute($params); 

重述問題:我有覆蓋TeamID具有非空值的問題如果它已經是NULL。我看不出代碼本身有什麼錯誤,所以我想象這與NULL值有關。

使用PHP/MySQL進行編碼的一個問題是,您無法逐步瀏覽您的代碼並同時查看數據庫的內容 - 因爲PHPMyAdmin也得到了解決。

感謝您的幫助!

+0

所以TeamID爲NULL,並且沒有更新? – 2012-02-29 17:49:22

+0

@BD。是的,這是完全正確的。 – 2012-02-29 17:51:30

+0

我假設用戶ID不爲空? – 2012-02-29 17:53:22

回答

2

問題的一部分可能在於在參數周圍使用引號。由於您使用帶參數的PDO準備語句,因此不必引用字符串。我不確定PDO如何代表null,但如果您嘗試設置SET TeamID = ''SET TeamID = 'null',並且根據列類型的不同,這可能無效。

+0

刪除引號。謝謝! – 2012-02-29 18:09:13

1

不要把引號命名參數與PDO:

$STH = $this->_db->prepare("UPDATE UserDetails SET 
      TeamID = ':teamID' WHERE UserID = ':userID';"); 
$STH->execute($params); 

UserID絕不等於字符串':userID',所以沒有得到更新。

爲了確保您的參數解釋,刪除引號,像這樣:

$STH = $this->_db->prepare("UPDATE UserDetails SET 
      TeamID = :teamID WHERE UserID = :userID"); 
$STH->execute($params); 
+0

很好解釋。謝謝! – 2012-02-29 18:09:52

+0

MySql(在其默認配置中?)將1與'1'相等,所以'UserID ='12345'將返回相應的記錄。同樣的事情去設置。即使col的類型是int,你也可以'UPDATE ... SET col ='1''。但是,您會在同一列上出現'UPDATE ... SET col ='''錯誤。 – Farray 2012-02-29 18:12:37