l0b*_*0b0 7 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
Run Code Online (Sandbox Code Playgroud)
很公平.这是一个可能的解决方案:
pg_query_params('SELECT CAST($1 AS INTEGER)', array(1));
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为我们明确了解数据类型.
但是下面的语句也有效,尽管它应该等同于第一个表达式:
pg_query_params('SELECT COALESCE($1)', array(1));
Run Code Online (Sandbox Code Playgroud)
为什么?是否COALESCE以某种方式修改$ 1的数据类型,或保证一些简单数据类型的结果?
编辑:文档在主题上相当短COALESCE.
coalesce始终返回第一个非空字符串,
如果提供了所有null(在您的情况下,是未定义的变量$1),
它会导致NULL.
NULL与未定义并不真正相同
请原谅我不好的解释...
第一个示例,您试图返回一个未定义的变量,这会导致错误。
但是,在第三个示例中,您尝试返回 NULL 值(由合并返回),
不再有未定义的变量,只是返回 NULL,这使得select 工作正常