PHP7+PostgreSQL9.6使用pg_query_params报错:参数1应为资源却为null
解决pg_query_params()报错:parameter 1 to be resource, null given
别着急,这个报错的关键点你理解错了——它说的是第一个参数(数据库连接对象)是null,不是第二个参数(SQL语句)!
咱们来一步步拆解问题:
先看你的
dbconn()函数:
你在函数里成功创建了$conn连接对象,但从头到尾都没有把这个对象返回出去!PHP里函数如果没有明确写return,默认会返回null。所以当你执行$conn = dbconn();时,$conn其实是个null值,这才导致pg_query_params()报错说第一个参数需要resource类型,却收到了null。修正方法很简单,给
dbconn()函数加上返回语句:
function dbconn(){ ini_set('display_errors', 1); //显示错误 //读取配置参数 $config = file_get_contents('../config.json'); $json = json_decode($config, true); //数据库登录信息 $host = $json['db_host']; $port = $json['db_port']; $dbname = $json['db_name']; $user = $json['db_user']; $password = $json['db_pwd']; //建立连接 $conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password"); if (!$conn) { echo "Not connected : " . pg_error(); exit; } // 新增这一行,返回连接对象 return $conn; }
- 额外的注意事项:
- 你提到的
$FeatureCollection拼接SQL的问题确实有严重的SQL注入风险,后续修复的时候,记得把这部分也改成用参数绑定的方式,比如把整个JSON字符串作为参数传给pg_query_params(),不要直接拼进SQL里。 - 调试的时候,可以在
$conn = dbconn();之后加一行var_dump($conn);,确认连接对象是否正常生成,这样能快速排查连接类问题。
- 你提到的
修正完dbconn()函数后,你的pg_query_params()调用应该就能正常工作了,因为现在$conn是有效的数据库连接resource了。
内容的提问来源于stack exchange,提问作者wfgeo
相关产品推荐
相关产品推荐

