Zend:如何在MySQL中插入NULL值

7

我正在使用Zend框架,配合MySQL、Apache和Ubuntu 9.04。

我试图像这样向数据库插入NULL值:

$personObj->setPersonId( '1' );
$personObj->setPersonEmail('NULL');
$personObj->save();

但是在数据库中,'NULL' 被存储为字符串而不是 NULL

当我使用这个:

$personObj->setPersonId( '1' );
$personObj->setPersonEmail(NULL);
$personObj->save();

但是没有任何反应,上一个条目没有改变。

我应该怎么做才能将 NULL 值插入到 MySQL 中?


当我使用 $personObj->setPersonEmail('NULL'); 时,它会将 NULL 插入为字符串。当我使用 $personObj->setPersonEmail(NULL); 时,先前的条目不会改变,也不会发生任何事情。 - Naveed
$personObj是什么类型的对象?正如其他人已经说过的,如果不知道setPersonEmail()的实现方式,就无法确定需要传递什么。 - Stefan Gehrig
$personObj是人员记录对象。setPersonEmail()是用于设置数据库中personEmail条目值的方法。save()是将所有设置的值存储到数据库中的方法。这是zend框架中的常见做法。正如我所说,它对字符串值完美运行,但问题是NULL条目。 - Naveed
那并没有帮助...了解setPersonEmail()save()的实现非常重要;特别重要的是数据如何写入数据库。在调用save()和数据写入数据库之间可能会发生很多事情。 - Stefan Gehrig
3个回答

17

如果你在分配后不修改任何值,那么

new $personObj->setPersonEmail(new Zend_Db_Expr('NULL'));

3
这个方法对我也适用,但我需要使用 new Zend_Db_Expr('NULL') - Jake N

1

首先想到的是直接传递空关键字,不要用引号括起来。正如Pavium所说,加上引号会将其转化为字符串。


我已经尝试过这个 $personObj->setPersonEmail(null); 但没有成功。实际上,我正在更新这个条目。数据库中已经存在一个电子邮件地址,我想将其删除并插入 NULL。 - Naveed
你可以尝试使用空引号,但这只会使它成为空字符串。你是否尝试过直接访问列,而不是通过设置函数?例如: $personObj->personEmail = null; - Tarka

0

我认为将NULL放在引号中是使其看起来像一个字符串的原因。

我不知道你的方法,但对于通过mysql INSERT命令进行直接插入,将单引号放在NULL周围是不正确的。


我也尝试过这个 $personObj->setPersonEmail(NULL); 但是没有任何反应。之前的条目仍然没有改变。 - Naveed
1
这完全取决于setPersonEmail()方法的工作方式,以及它是否有效地用于更新条目。 - pavium
是的,它会更新。当我使用 $personObj->setPersonEmail('test@test.com'); 时,它会用 test@test.com 替换以前的数据库条目。但我的问题是,如果用户删除他/她的电子邮件地址,如何删除先前的条目并插入 NULL。 - Naveed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接