不幸的是,参数将不会尊重 NULL 或 NOW() 的字符串表示形式。如果您的代码推送这些值,它们将被视为字符串,并按字面意义插入为 "NULL" 和 "NOW()"。
理想情况下,应该有一个额外的参数,您可以将其分配给强制将此文本作为 pgSQL 函数/保留字,而不是将其包装为字符串(假设 pgSQL 的参数化查询支持此功能)。
同样的问题也发生在 "WHERE column IN (1,2,3,4)" 中使用的逗号列表中,params 将 "1,2,3,4" 视为字符串,而不是数字列表,并使用引号运行它。
为了进行调试,我使用此函数模拟参数,请记住这并不完全准确,它只尝试模拟参数查询创建的实际 SQL。
<?php
function pg_query_params_return_sql($query, $array)
{
$query_parsed = $query;
for ($a = 0, $b = sizeof($array); $a < $b; $a++)
{
if ( is_numeric($array[$a]) )
{
$query_parsed = str_replace(('$'.($a+1)), str_replace("'","''", $array[$a]), $query_parsed );
}
else
{
$query_parsed = str_replace(('$'.($a+1)), "'".str_replace("'","''", $array[$a])."'", $query_parsed );
}
}
return $query_parsed;
}
?>