首页 > 解决方案 > PGAdmin 成功但 PDO 查询失败

问题描述

我想获取有关 Postgres 数据库表的列信息。我正在使用以下查询:

select column_name as "Field", data_type as "Type", is_nullable as "Null", character_maximum_length as "max_length" from information_schema.columns where table_name='testempty'

(在某些时候,我将删除 AS 子句。当我最初设置此查询时,我有理由将它们包括在内,但这些原因已经不复存在。)

当我在 PGAdmin 中运行查询时,我得到了我期望的结果:有 2 列,我看到了他们请求的详细信息。当我在 PHP 中使用 PDO 执行相同的查询时,我得到 0 行。没有错误,执行调用返回 true。这是PHP代码:

try {
    $remote_statement = $remote_con->prepare($column_query);
    $remote_exec = $remote_statement->execute();
} catch(Exception $e) {
    file_put_contents("logs/remote.log", '[' . date("Y-m-d H:i:s") . ' ' . $_SERVER["REMOTE_ADDR"] . "] Prepare failed: " . $e->getMessage() . "\n", FILE_APPEND);
}
if (!$remote_exec) {
    file_put_contents("logs/remote.log", '[' . date("Y-m-d H:i:s") . ' ' . $_SERVER["REMOTE_ADDR"] . "] Execute failed\n", FILE_APPEND);
}
$remote_error = $remote_statement->errorInfo();
if (!empty($remote_error[2])) {
    file_put_contents("logs/remote.log", '[' . date("Y-m-d H:i:s") . ' ' . $_SERVER["REMOTE_ADDR"] . "] Query failed: " . $remote_error[2] . "\n", FILE_APPEND);
    die($remote_error);
}
$remote_rows = $remote_statement->fetchAll(PDO::FETCH_ASSOC);

$remote_con是我之前在代码中创建的 PDO 连接对象。$column_query设置为我上面列出的查询。在此之前我在另一个表上运行相同的代码,我得到了预期的结果。

我很欣赏这里的任何有用的提示。我确信我遗漏了一些明显的东西,但让我感到困惑的是,查询在 PGAdmin 中工作,而不是通过 PHP 调用。

标签: phppostgresqlpdopgadmin

解决方案


原来这是一个特定于表的权限问题。授予 PUBLIC 对问题表的 SELECT 权限,并且通过 PHP 进行的查询有效。我在另一个数据库中发现了另一对存在此问题的表,并且通过授予此权限来解决所有问题。


推荐阅读