php-fetching pg_execute()prepared语句的关联数组返回false

o2g1uqev  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(256)

上下文

我正在尝试使用php和postgresql实现一个(希望是)简单的登录系统。
这是包含用户名和哈希密码的postgres表。

用户不能在此表中创建新行,所以我已经使用 password_hash('password', PASSWORD_BCRYPT) 然后手动复制粘贴表中的值。
如果你认为这会造成问题,请告诉我。
不过,用户可以通过在登录表单中输入正确的用户名和密码组合来登录到现有的帐户。
当按下登录按钮时,我需要检索有关输入的用户的信息,以便如果它与任何用户匹配,我可以使用验证密码 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' = $1";

$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()失败并返回false,但是我相信这也可能是由错误的查询或我构建语句的方式造成的,因此我包含了所有内容。

编辑

忘了提一下,我还尝试将查询公式化为:

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

在这种情况下,我得到了一个错误的答案: Warning: pg_prepare(): Query failed: ERROR: column "username" does not exist LINE 1: SELECT * FROM user WHERE username = $1 .

kzmpq1sx

kzmpq1sx1#

多亏了别慌的评论,我重新命名了我的名字 user 表到 utiliser 一切正常。
还应该注意的是,这可以通过在表名上使用双引号来避免(根据这个答案),但是,双引号是邪恶的,所以最好远离它。
下面是完整的保留字表,以避免作为表/列名。

相关问题