pg_query INSERT INTO无法正常工作

时间:2017-10-20 16:04:56

标签: php postgresql insert-into

我有Apache24,php环境和postgresql数据库的设置。 我尝试使用值填充db表中的某些列(而不是所有列),但它无法正常工作。

我收到以下错误/警告并且未填充数据库: 警告:pg_query():查询失败:错误:语法错误在或附近&#34; c329a92850f6d539dd376f4816ee2764517da5e0235514af433164480d7a&#34;第1行:...单词,盐)VALUES(DEFAULT,cff @ jjj.no,per,8254c329a92850 ...... ^在C:\ Users \ Public \ Server \ Apache24 \ htdocs \ eMe \ newuser.php第34行< / p>

对此的任何支持都非常感谢。我搜索过类似的问题但未能将答案解释为我的背景。

<?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中描述引号和反引号,但它并没有解决问题。错误/警告虽然略有不同:

警告:pg_query():查询失败:错误:语法错误在或附近&#34;`&#34;第1行:在第30行的C:\ Users \ Public \ Server \ Apache24 \ htdocs \ eMe \ newuser.php中插入用户(userid,`mailaddress`,`username`,`use ... ^ < / p>

1 个答案:

答案 0 :(得分:0)

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

$username = pg_escape_string($username);

$username被转义为注入,这很好,但这会在内部添加必要的引号值,不在值附近(请参阅{{3更多)。

因此,在查询中,需要在文字文本值附加的引号中转义内容,如下所示:

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

(假设此查询中的变量已通过pg_escape_string