我有一个奇怪的问题,我确信这是因为我不了解MySQL的所有特性:(
我有一个表,其中一列的默认值为NULL
,即"TeamID"。当我添加一个新行而不给该列一个值时,它就是NULL
。完美的除了当我希望更新该行时,以下代码似乎不会更改NULL
的值(甚至不会导致任何错误):
$STH = $this->_db->prepare("UPDATE UserDetails SET
TeamID = ':teamID' WHERE UserID = ':userID';");
$STH->execute($params);
重申这个问题:如果TeamID已经是NULL
,那么用不可为null的值覆盖它会遇到问题。我看不出代码本身有什么错误,所以我认为这与NULL
值有关。
使用PHP/MMySQL进行编码的一个问题是,您不能在遍历代码的同时查看数据库的内容,因为PHPMyAdmin也会被遍历。
谢谢你的帮助!
部分问题可能在于在参数周围使用引号。由于您使用的是带有params的PDO准备语句,因此不必引用字符串。我不确定PDO是如何表示null
的,但您可能最终会遇到这样的情况:尝试设置SET TeamID = ''
或SET TeamID = 'null'
,根据列类型的不同,这可能无效。
不要用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);