MySQL:无法更新现有的NULL值

时间:2012-02-29 17:47:22

标签: php mysql pdo

我有一个奇怪的问题,我确信是因为我不了解MySQL的所有特性:(

我有一个表格,其列的默认值为NULL,“TeamID”。当我添加新行但没有为该列提供值时,它为NULL。完善。除非我希望更新该行,否则以下代码似乎不会更改NULL中的值(甚至导致任何错误):

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

重述问题:如果TeamID已经是NULL,我会在使用不可为空的值覆盖TeamID时遇到问题。我无法看到代码本身有什么错误,所以我想象它与NULL值有关。

使用PHP / MySQL进行编码的一个问题是,您无法单步执行代码并同时查看数据库的内容 - 因为PHPMyAdmin也可以逐步完成。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您的部分问题可能在于在参数周围使用引号。由于您正在使用带有params的PDO预处理语句,因此您不必引用字符串。我不确定PDO如何代表null,但您最终可能会尝试设置SET TeamID = ''SET TeamID = 'null',并且根据列类型,可能不会有效的。

答案 1 :(得分: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);