解析错误:语法错误,意外T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING是消息。它来自这行代码:
$query = ("SELECT *
FROM users
WHERE user_name = $_POST['user_name']
& password = $_POST['password']
& user_type = $_POST['user_type']");
有没有人知道这一切的含义?如果是这样,有人知道如何处理这个问题吗?
答案 0 :(得分:4)
使用:
$query = sprintf("SELECT u.*
FROM USERS u
WHERE u.user_name = '%s'
AND u.password = '%s'
AND u.user_type = '%s' ",
mysql_real_escape_string($_POST['user_name']),
mysql_real_escape_string($_POST['password']),
mysql_real_escape_string($_POST['user_type']) );
$result = mysql_query($query);
答案 1 :(得分:2)
您不能像这样插入$_POST
。你需要用大括号({
和}
)来包装它们。当你已经在这样的字符串中时,你也不需要引用键名。
您还应引用这些值,并将&
与AND
交换。
最后还需要;
。
您也不需要将其包装在括号中。
$query = "SELECT *
FROM users
WHERE user_name = '{$_POST[user_name]}'
AND password = '{$_POST[password]}'
AND user_type = '{$_POST[user_type]}'";
...不要直接插入用户输入。使用转义机制。
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$user_type = mysql_real_escape_string($_POST['user_type']);
$query = "SELECT *
FROM users
WHERE user_name = '$username'
AND password = '$password'
AND user_type = '$user_type'";
我建议使用PDO和绑定参数,而不是自己构建SQL。
此外,您会看到用户输入的密码直接用于在数据库中进行比较。使用某种形式的单向邮件摘要,例如bcrypt。
答案 2 :(得分:0)
$username = mysql_real_escape_string($_POST["user_username"]);
$password = mysql_real_escape_string($_POST["user_password"]);
$type = mysql_real_escape_string($_POST["user_type"]);
mysql_query("SELECT * FROM users WHERE user_name='$username' AND user_password='$password' AND user_type='$type' LIMIT 1");
答案 3 :(得分:0)
要将一维数组值插值为字符串,请使用以下语法:
"foo = $_POST[bar]"
请注意没有引号。
要插入嵌套数组或通常使用普通语法,请使用大括号:
"foo = {$_POST['bar']}"
在任何情况下,尽管使用SQL查询执行此操作,您仍需要在将值插入查询之前转义值。所以,这样做:
$query = sprintf('SELECT foo FROM bar WHERE baz = "%s"',
mysql_real_escape_string($_POST['baz']));
答案 4 :(得分:0)
确保考虑SQL注入。
尝试:
$username = mysql_real_escape_string($_POST["user_username"]);
$password = mysql_real_escape_string($_POST["user_password"]);
$type = mysql_real_escape_string($_POST["uesr_type"]);
$query = "SELECT * FROM users WHERE user_name='$username' AND password='$password' AND
user_type='$type'";
$result = mysql_query($query);
答案 5 :(得分:0)
我还建议稍微阅读一下手册:http://us.php.net/manual/de/language.types.string.php#language.types.string.parsing。该链接将向您解释PHP如何解析字符串中的变量。