我有一个奇怪的问题,我确信是因为我不了解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也可以逐步完成。
感谢您的帮助!
答案 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);