![](/img/trans.png)
[英]Cannot login with PhpMyAdmin on Mac os x 10.6. Does anyone know a fix to this error message?
[英]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.