PHP SQL INSERT INTO错误消息


PHP SQL INSERT INTO error message

所以我正在自学如何使用php创建在线表单。

在我的第一页上,我有以下内容:

<!doctype html>
<html>
<head>
<title> Hi </title>
</head>
<body>
<form method="POST" action="Page2.php">
Username: <input type="text" name="username" >
Password: <input type="text" name="password" >
<input type="submit" name="submit" value="submit">
</body>
</html>

在我的第二页(Page2.php):

 <?php

     if($_POST["submit"] == "submit")
     {
             $username=$_POST["username"];
             $password=$_POST["password"];
    $db = mysql_connect("localhost","root","root");
    if(!$db) die("Error connecting to MySQL database.");
    mysql_select_db("testdatabase" ,$db);
    $sql="INSERT INTO testdatabase_table ('username', 'password') VALUES (". PrepSQL($username) . "," . PrepSQL($password) . ")";
    $query=mysql_query($sql);
    echo $query;
    if(!$query)
    {
        echo "Failed".mysql_error();
    }

    exit();

    }
                function PrepSQL($value)
                {
                // Stripslashes
                if(get_magic_quotes_gpc()) 
                {
                   $value = stripslashes($value);
                }
                  // Quote
                  $value = "'" . mysql_real_escape_string($value) . "'";
                  return($value);
               }
?>

以下是我得到的错误:失败您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解在第1行的"用户名"、"密码")VALUES("、")附近使用的正确语法

任何快速的建议都将不胜感激,谢谢。

使用回溯标记转义列和表名,而不是引用

INSERT INTO testdatabase_table (`username`, `password`) VALUES ...

省略列列表中的单引号:

INSERT INTO testdatabase_table (username, password) VALUES ...

这将适用于您的代码。

$userSafe = PrepSQL($username);
$passSafe = PrepSQL($password);
    $sql="INSERT INTO testdatabase_table ('username', 'password') VALUES ('$username','$password')";

但你应该使用某种类型的crypt/hash,我也测试过。

$username = mysqli_real_escape_string($dbc, filter_var(($_POST['username']), FILTER_SANITIZE_STRING));
$password = mysqli_real_escape_string($dbc, filter_var(($_POST['password']), FILTER_SANITIZE_STRING));
    $passhash = hash('sha512', $password);
$sql="INSERT INTO testdatabase_table ('username', 'password') VALUES ('$username','$password')";