7

此语句不适用于 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 的数据类型,或者保证某些简单的数据类型作为结果?

编辑文档COALESCE.

4

1 回答 1

2

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

NULL和 undefined 不一样

原谅我不好的解释...

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

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

于 2011-08-24T09:38:58.373 回答