2012-04-04 41 views
2

我有一個簡單的網絡調查,用戶可以使用單選按鈕選擇他們的答案。我檢查哪些按鈕已經使用javascript打勾。我沒有將按鈕設置爲任何默認狀態,所以有可能不回答問題。在Postgresql數據庫中處理NaN

當我將這個傳遞給php並嘗試將結果插入到integer類型的列中時,如果所有單選按鈕都被勾選,則沒有問題。但是,如果有任何未選中按鈕我收到以下錯誤信息:

Query failed: ERROR: invalid input syntax for integer: "NaN" 

我明白,這是由於這樣的事實,我的整列不能處理字符串,但我不知道是什麼處理這個問題的最佳策略是。我應該檢查在JavaScript方面還是有任何方法在PHP中,我應該測試值不是null?

我用以下結構插入結果到我的數據庫:

$query=pg_query_params($connection, 'INSERT INTO tracking.postsurvey(answer1) values($1)', array($answer1)); 
+0

'NaN'是Javascript的東西。無論你在JavaScript中做什麼,都會使得在NaN中傳遞的值而不是null。 PHP不關心參數是否爲空,並且您的數據庫可能不會。 – AndrewR 2012-04-04 16:30:21

回答

3

在解決辦法是改變查詢:

'INSERT INTO tracking.postsurvey(answer1) values(nullif($1, 'NaN'))' 

http://www.postgresql.org/docs/current/interactive/functions-conditional.html#FUNCTIONS-NULLIF

+0

嗯,我無法得到這個工作。 ''南'打破了報價語法,''南''給出錯誤消息'錯誤:列" NaN "不存在'。 – djq 2012-04-04 17:37:54

+2

糟糕。由於您使用了帶引號的字符串,因此您需要將NaN周圍的引號加倍。不是雙引號字符 - 兩個撇號。或者你可以用美元報價。因此:'INSERT INTO tracking.postsurvey(answer1)values(nullif($ 1,''NaN''))'或'INSERT INTO tracking.postsurvey(answer1)values(nullif($ 1,$$ NaN $$))' – kgrittn 2012-04-04 17:41:34