2010-01-25 61 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

相關問題