2

问题

以下代码返回“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_id是一个integer not null

我试过的

4

2 回答 2

0

到目前为止,您的所有测试看起来都发生在 PHP 端。直接的问题是 PostgreSQL 方面发生了什么。我的赌注是这样的:

  1. 查询不是您认为的那样。

  2. PostgreSQL 没有得到你认为它得到的东西。

  3. 别的东西。

首先要做的是使用 pgadmin 登录并运行以下实用程序语句:

ALTER USER [app username] SET log_statements=all;

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

完成后,您可以:

 ALTER USER [app username] RESET log_statements;
于 2013-05-06T09:30:14.637 回答
-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);
于 2013-03-14T22:06:08.010 回答