2012-01-29 80 views
4

我使用PHP PDO和Postgresql後端。我有一個表有一些可爲空的字段,當用戶沒有輸入HTML表單字段時,我想將NULL插入到該字段中,而不是空字符串(這很重要,因爲這些表中的一些SELECT後來使用了這樣的條件因爲WHERE x不是NULL)。PHP PDO插入NULL而不是空potsgresql

但是,此版本的bindParam代碼將空字符串插入可空字段而不是NULL。

$stmt2->bindParam(':title', $title, PDO::PARAM_STR); 

我一直在讀頗有幾分想通了,這是插入空進入該領域,而不是答案:

$stmt2->bindParam(':title', $title, PDO::PARAM_NULL); 

但這意味着我需要預先檢查所有參數正在傳遞給可空字段以確定它們是否爲空,如果是,則傳遞PDO :: PARAM_NULL而不是PDO_PARAM_STR。我當然可以做到這一點,但希望可能有一個設置,它會告訴PDO,如果它遇到一個空字符串,請插入null。

我偶然發現這個

$this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING); 

但它沒有效果,隨着研究的深入,我想這隻會影響的方式記錄了,而不是在路上。

任何其他選項預先檢查變量?

感謝 亞倫

回答

6

如果你想空,只需插入null,而不是空字符串。

$stmt2->bindParam(':title', $title === '' ? null : $title, PDO::PARAM_STR); 
+0

謝謝,這是明顯的盯着我的臉(不能看到樹林的森林....) – Alpaus 2012-02-03 05:18:22

1

除了xdazz的更合適的答案,你經常可以解決這樣的事情在SQL:剛剛改寫查詢INSERT INTO ... VALUES (?)喜歡的東西INSERT INTO ... VALUES (NULLIF(?, ''))