php - 获取 pg_execute() 准备语句的关联数组 returns false

php - fetching associative array of pg_execute() prepared statement returns false

上下文

我正在尝试使用 PHP 和 PostgreSQL 实现一个(希望如此)简单的登录系统。

这是包含用户名和散列密码的 postgres table。

用户不能在此 table 中创建新行,因此我已经使用 password_hash('password', PASSWORD_BCRYPT) 散列了密码,然后手动复制粘贴了 table 中的值。

如果您认为这会造成问题,请告诉我。

但是,用户可以通过在登录表单中输入正确的用户名和密码组合来登录现有帐户。

按下登录按钮后,我需要检索有关输入的用户的信息,以便如果它与任何用户匹配,我就可以使用 password_verify().

验证密码

问题

点击登录按钮时我运行这段代码:

$dbconn = pg_connect("host=host dbname=dbname user=user password=pwd");
if (!$dbconn) {
    die("Error in connection: " . pg_last_error());
}

// setting the username as it would be provided by the form field
$username = 'Dan';

// maybe unrelated: why do I need to write 'username' instead of username? all of my other queries work without ''
$query = "SELECT * FROM user WHERE 'username' = ";

$stmt = pg_prepare($dbconn, "", $query);
var_dump($stmt); // gives output "resource(3) of type (pgsql result)", got no clue on how to see what's indside

$result = pg_execute($dbconn, "", array($username));
var_dump($result); // gives output "resource(4) of type (pgsql result)"

$row = pg_fetch_assoc($result);
var_dump($row); // gives output "bool(false)", indicating that pg_fetch_assoc() failed

主要问题是 pg_fetch_assoc() 失败并且 returns 错误,但是我相信这也可能是由不正确的查询或我构建语句的方式引起的,因此为什么我包括了所有内容。

编辑

忘了说我也试过将查询公式化为:

$query = "SELECT * FROM user WHERE username = ";

在这种情况下,我得到错误提示: Warning: pg_prepare(): Query failed: ERROR: column "username" does not exist LINE 1: SELECT * FROM user WHERE username = .

感谢 ,我将 user table 重命名为 utiliser,一切正常。

还应注意,这可以通过在 table 名称上使用双引号来规避(根据 this answer),但是,双引号是邪恶的,所以最好远离。

Here's the full table 个要避免作为 table/column 名称的保留字。