【问题标题】:Handling NaN in a Postgresql database在 Postgresql 数据库中处理 NaN
【发布时间】:2012-04-18 09:45:51
【问题描述】:

我有一个简单的网络调查,用户可以使用单选按钮选择他们的答案。我检查了使用 javascript 勾选了哪些按钮。我没有将按钮设置为任何默认状态,因此可以不回答问题。

当我将它传递给 php 并尝试将结果插入整数类型的列时,如果所有单选按钮都被勾选,则没有问题。但是,如果有任何未勾选的按钮,我会收到以下错误消息:

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

我知道这是因为我的整数列无法处理字符串,但我不知道处理这个问题的最佳策略是什么。我应该检查 javascript 方面还是在 php 中有任何方法我应该测试值不为空?

我使用以下结构将结果插入到我的数据库中:

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

【问题讨论】:

  • NaN 是一个 Javascript 的东西。无论您在 Javascript 中做什么,都是使传入 NaN 而不是 null 的值。 PHP 不关心参数是否为空,您的数据库可能也不关心。

标签: php javascript postgresql


【解决方案1】:

解决方案是将查询更改为:

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

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

【讨论】:

  • 嗯,我无法让它工作。 'Nan' 打破引号语法,"Nan" 给出错误消息ERROR: column "NaN" does not exist
  • 糟糕。由于您使用的是带引号的字符串,因此您需要将 NaN 周围的引号加倍。不是双引号字符——两个撇号。或者你可以使用美元报价。所以:'INSERT INTO tracking.postsurvey(answer1) values(nullif($1, ''NaN''))' 或 'INSERT INTO tracking.postsurvey(answer1) values(nullif($1, $$NaN$$))'
猜你喜欢
  • 2018-10-29
  • 2013-01-19
  • 1970-01-01
  • 2017-05-27
  • 2019-08-15
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多