簡體   English   中英

有誰知道這個 php 錯誤消息背后的含義?

[英]Does anyone know the meaning behind this php error message?

解析錯誤:語法錯誤,意外的 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']");

有沒有人知道這一切的含義? 如果是這樣,有誰知道如何處理這個問題?

利用:

$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);

參考

您不能像這樣插入$_POST 您需要用大括號( {} )將它們包裹起來。 當已經在這樣的字符串中時,您也不需要引用鍵名。

您還應該引用這些值,並將&AND交換。

你還需要一個; 在最后。

你也不需要用括號括起來。

$query = "SELECT * 
         FROM users 
        WHERE user_name = '{$_POST[user_name]}' 
          AND password = '{$_POST[password]}' 
          AND user_type = '{$_POST[user_type]}'";

但...

...不要像那樣直接插入用戶輸入。 使用 escaping 機制。

$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

$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");

要將一維數組值插值到字符串中,請使用以下語法:

"foo = $_POST[bar]"

注意沒有引號。

要插入嵌套的 arrays 或通常使用正常語法,請使用大括號:

"foo = {$_POST['bar']}"

在任何情況下,盡管對 SQL 查詢執行任何此操作,您都需要在將值插入查詢之前對其進行轉義 所以,這樣做:

$query = sprintf('SELECT foo FROM bar WHERE baz = "%s"',
                 mysql_real_escape_string($_POST['baz']));

確保考慮到 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);

我還建議稍微閱讀一下手冊: http://us.php.net/manual/de/language.types.string.php#language.types.string.parsing 該鏈接將向您解釋 PHP 如何解析字符串中的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM