2010-01-25 60 views
4

不知何故,当使用具有execute()函数的多行插入方式将数据导入到mysql中时,有许多行添加了字符串NULL以用于某些列。 如何将这些NULL字符串转换为MySQL NULL值,以便我可以在显示数据时使用is_null()在php中检查空值。Zend Framework将NULL字符串转换为MySql的实际NULL值

我该如何避免这个问题?我对每个数据都使用了quote()函数。是空字段上使用引号的问题吗?我正在导入一个csv文件。

谢谢

回答

9

要插入SQL NULL或任何其他表达式,你可以使用一个Zend_Db_Expr对象。即使您使用quote(),ZF也会通过未加引号的方式传递这些对象。

$null = new Zend_Db_Expr("NULL"); 

$table = new MyTable(); 
$table->insert(123, "abc", $null); 

注意,因为使用的Zend_Db_Expr绕过这两个报价和参数,你负责防范SQL注入。


这是切你的问题,但考虑LOAD DATA INFILE如果你批量加载CSV文件。它比使用多行INSERT的速度快20倍。

+0

谢谢比尔。正是我在找的东西。因此,当为插入数据迭代数据时,我应该查找空数据,而不是使用quote(),但是对于该空数据使用新的Zend_Db_Expr(“NULL”)? 我一定会去看看那个LOAD_DATA_INFILE函数。我想我可以将数据加载到临时表中,然后对其执行数据功能,然后将其删除。 – EricP 2010-01-25 17:11:09

+1

是的,你可以通过临时表进行一些后处理(顺便说一句,你不必删除临时表,因为当你的数据库连接关闭时它会消失)。您可以使用'LOAD DATA INFILE'的可选'SET'子句来进行有限的数据转换。看文档。 – 2010-01-25 17:17:32

相关问题