什麼不對這個代碼:查詢的MySQL和PHP
$q = query("select * from users where email = '$_POST['email']' and name = '$_POST['name']'");
解析錯誤:解析錯誤,期待T_STRING' or
T_VARIABLE '或'T_NUM_STRING' 在C:\ WAMP \ WWW \康恩\的index.php上線16
在此先感謝。
什麼不對這個代碼:查詢的MySQL和PHP
$q = query("select * from users where email = '$_POST['email']' and name = '$_POST['name']'");
解析錯誤:解析錯誤,期待T_STRING' or
T_VARIABLE '或'T_NUM_STRING' 在C:\ WAMP \ WWW \康恩\的index.php上線16
在此先感謝。
$q = query("select * from users where email = '{$_POST['email']}' and name = '{$_POST['name']'}");
你錯過了兩個單引號。另外:
1)始終逃脫用戶輸入(security reasons):
$email = mysql_real_escape_string($_POST['email']);
$name = mysql_real_escape_string($_POST['name']);
$q = query("select * from users where email = '{$email}' and name = '{$name}'");
2)獲取與代碼高亮的編輯器,這樣你就不會得到今後發生類似的問題。我建議Notepad++。
+1指出需要逃避用戶輸入,儘管您可能已經更清楚地知道爲什麼。 – 2010-01-25 15:45:59
@klausbyskov:編輯 – raveren 2010-01-25 15:47:50
太棒了!不錯的答案:-) – 2010-01-25 15:57:53
你應該用大括號包圍你的內聯變量。
像這樣:
$q = query("select * from users where email = '{$_POST['email']}' and name = '{$_POST['name']}'");
您直接在SQL查詢這是非常不好用$ _ POST。
使用:
$ email = mysql_real_escape_string($ _ POST ['email']);
$ name = mysql_real_escape_string($ _ POST ['name']);
$ q = query(「SELECT ... $ name ... $ email」);
我建議使用字符串連接而不是嵌入變量的字符串,因爲它是(恕我直言)更易於閱讀
$ Q =查詢(「SELECT ...」。$名字。「... 「。$ email);
SELECT *是壞的(除非你真的,真的想所有領域)
皮斯不這樣做的。這是SQL注入的完美例子。
一個更好的版本:
$email = mysql_real_escape_string($_POST['email']);
$name = mysql_real_escape_string($_POST['name']);
$q = query("select * from users where email = '$email' and name = '$name'");
解析錯誤:解析錯誤,期待T_STRING 'orT_VARIABLE' 或'T_NUM_STRING」
習慣了這個錯誤。總是意味着有報價問題。
熟悉瓦特/使用「和‘
試試這個:
$q = query("select * from users where email = '" . $_POST['email'] . "' and name = '" . $_POST['name'] . "'");
另一張海報提到了SQL注入。將未過濾的GET或POST變量直接插入到SQL中確實是一個問題。 – 2010-01-25 15:44:14
您正在使用雙引號你把引號$ _POST [’電子郵件」]和裏面使它得到解釋錯誤的方式
這將以正確的方式工作: $ q = query('select * from users where email ='。$ _ POST ['email']。'and name ='。$ _ POST ['name']] );
但即使它工作,它仍然是錯誤的傳遞職位變量正確的查詢。作爲一名開發人員,您需要學會'永遠不要相信用戶'。所以,最好的辦法是通過轉義像這樣進行清潔:
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$q = query("select * from users where email = $email and name = $name");
或本:
$q = query('select * from users where email = '.mysql_real_escape_string($email).' and name = '.mysql_real_escape_string($name));
(你喜歡什麼樣的方式)
這是我們所不安全的,因爲它可以得到的。 – Berzemus 2010-01-25 15:41:46