即使SQL查询在pgAdminIII中正常工作,pg_query也会返回NULL

时间:2013-03-14 21:57:45

标签: php postgresql

问题

以下代码返回“queried ... NULL”(假设$id始终是一个6位数字)

$id = sprintf("%06d", $id);
$sql = 'SELECT DISTINCT first_name, last_name
        FROM schemaname.tablename
        WHERE person_id='.$id;
$q = pg_query($sql) or die(pg_last_error().' '.$sql);
print 'queried...';
$items = pg_fetch_all($q) or die(pg_last_error().' '.var_export($q, true));
print 'fetched...';
exit(0);

注意:person_idinteger not null

我尝试过什么

2 个答案:

答案 0 :(得分:0)

到目前为止,您所有的测试看起来都像是在PHP方面发生的。当前的问题是PostgreSQL方面正在发生的事情。我打赌会是这样的:

  1. 查询不是您认为的。

  2. PostgreSQL没有得到您认为的结果。

  3. 其他。

  4. 要做的第一件事是使用pgadmin登录并运行以下实用程序语句:

    ALTER USER [app username] SET log_statements=all;
    

    然后运行PHP脚本并检查PostgreSQL实际接收的内容。然后,您可以运行pgAdmin中的日志语句进行检查。例如,您可能会发现您的sprintf没有按照您的想法进行操作,或者您的查询中存在拼写错误。

    完成后你可以:

     ALTER USER [app username] RESET log_statements;
    

答案 1 :(得分:-2)

您没有连接到数据库。您需要创建数据库连接,然后将该连接的处理程序传递给pg_query()

$conn = pg_pconnect("dbname=publisher");
if (!$conn) {
    echo "An error occurred.\n";
    exit;
}

$id = sprintf("%06d", $id);
$sql = 'SELECT DISTINCT first_name, last_name
        FROM schemaname.tablename
        WHERE person_id='.$id;
$q = pg_query($conn, $sql) or die(pg_last_error().' '.$sql);
print 'queried...';
$items = pg_fetch_all($q) or die(pg_last_error().' '.var_export($q, true));
print 'fetched...';
exit(0);