数据类型$ 1 vs. coalesce($ 1)

时间:2011-08-24 09:22:38

标签: php postgresql query-parameters

此语句不适用于PostgreSQL 8.2.4和PHP 5.2.17:

 pg_query_params('SELECT $1', array(1));
 ERROR: could not determine data type of parameter $1 

足够公平。这是一个可能的解决方法:

 pg_query_params('SELECT CAST($1 AS INTEGER)', array(1));

这是有道理的,因为我们明确了解数据类型。

但是下面的语句也适用,虽然它应该等同于第一个表达式:

 pg_query_params('SELECT COALESCE($1)', array(1));

为什么呢? COALESCE以某种方式修改$ 1的数据类型,或者保证一些简单的数据类型作为结果吗?

修改The docsCOALESCE的主题上相当简短。

1 个答案:

答案 0 :(得分:2)

coalesce总是返回第一个非空字符串,
如果提供了所有null(在您的情况下,是$1的未定义变量),则 它导致NULL

NULL与undefined

并不完全相同

原谅我的错误解释......

第一个示例,您尝试返回导致错误的未定义变量。

但是,在第三个示例中,您尝试返回NULL值(由coalesce返回),
没有更多未定义的变量,只返回一个NULL,这使得选择正常工作