pg_query INSERT INTO 无效

pg_query INSERT INTO not working

我安装了 Apache24、php 环境和 postgresql 数据库。 我正在尝试用值填充 db table 中的某些列(不是全部),但它没有像我预期的那样工作。

我得到以下 error/warning 并且没有填充数据库: 警告:pg_query():查询失败:错误:"c329a92850f6d539dd376f4816ee2764517da5e0235514af433164480d7a" 第 1 行或附近的语法错误:...word, salt) VALUES (DEFAULT, cff@jjj.no, per, 8254c329a92850 ... ^ 在 C:\Users\Public\Server\Apache24\htdocs\eMe\newuser.php 第 34 行

非常感谢对此的任何支持。我搜索过类似的问题,但无法将答案解释到我的上下文中。

<?php
# Registration form input to postgresql user table in myDB
session_start();

# Retrieve data from input form
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];

# Concatenate and hash password with salt
require_once(dirname(__DIR__).'\eMe\saltgenerator.php');
global $randString;
#$randString = pg_escape_string($randString);
$isalt = pg_escape_string($randString);

$saltandpassword = $isalt. $password;
$hashedpassword = hash('sha256', $saltandpassword, false);

$username = pg_escape_string($username);
$email = pg_escape_string($email);
$hashedpassword= pg_escape_string($hashedpassword);

# Insert data into Postgresql database
# INSERT INTO table_name (column1, column2, column3 .....) VALUES (value1, value2, value3....) 
include_once(dirname(__DIR__).'\eMe\config.php');
$query = "INSERT INTO users (userid, mailaddress, username, userpassword, salt) VALUES (DEFAULT, $email, $username, $hashedpassword, $isalt)";
#$result = 
#pg_query_params($query);
pg_query($query);
?>

我已尝试按照此 link 中的描述添加引号和反引号,但它并没有解决问题。 error/warning 略有不同:

警告:pg_query():查询失败:错误:“`”处或附近的语法错误 第 1 行:插入用户(userid、`mailaddress`、`username`、`在第 30

行的 C:\Users\Public\Server\Apache24\htdocs\eMe\newuser.php 中使用... ^

您的代码中唯一的问题是您在编写代码时还没有弄清楚:

$username = pg_escape_string($username);

$username 被转义以进行注入,这很好,但这会在 内添加必要的引号 值, 不在 [=26= 附近] 值(有关更多信息,请参阅 Whats does pg_escape_string exactly do?)。

所以在查询中,除了转义内容外,还需要在文字文本值周围加上引号,如下所示:

$query = "INSERT INTO users (userid, mailaddress, username, userpassword, salt)
          VALUES (DEFAULT, '$email', '$username', '$hashedpassword', '$isalt')";

(假定该查询中的变量已经通过pg_escape_string