2010-01-25 88 views
1

什麼不對這個代碼:查詢的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

在此先感謝。

+0

這是我們所不安全的,因爲它可以得到的。 – Berzemus 2010-01-25 15:41:46

回答

8
$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++

+0

+1指出需要逃避用戶輸入,儘管您可能已經更清楚地知道爲什麼。 – 2010-01-25 15:45:59

+0

@klausbyskov:編輯 – raveren 2010-01-25 15:47:50

+0

太棒了!不錯的答案:-) – 2010-01-25 15:57:53

2

你應該用大括號包圍你的內聯變量。

像這樣:

$q = query("select * from users where email = '{$_POST['email']}' and name = '{$_POST['name']}'"); 
2
  1. 您直接在SQL查詢這是非常不好用$ _ POST。
    使用:

    $ email = mysql_real_escape_string($ _ POST ['email']);
    $ name = mysql_real_escape_string($ _ POST ['name']);
    $ q = query(「SELECT ... $ name ... $ email」);

  2. 我建議使用字符串連接而不是嵌入變量的字符串,因爲它是(恕我直言)更易於閱讀

    $ Q =查詢(「SELECT ...」。$名字。「... 「。$ email);

  3. SELECT *是壞的(除非你真的,真的所有領域)

1

皮斯不這樣做的。這是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'"); 
1

解析錯誤:解析錯誤,期待T_STRING 'orT_VARIABLE' 或'T_NUM_STRING」

習慣了這個錯誤。總是意味着有報價問題。

熟悉瓦特/使用「和‘

2

試試這個:

$q = query("select * from users where email = '" . $_POST['email'] . "' and name = '" . $_POST['name'] . "'"); 
+0

另一張海報提到了SQL注入。將未過濾的GET或POST變量直接插入到SQL中確實是一個問題。 – 2010-01-25 15:44:14

2

您正在使用雙引號你把引號$ _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)); 

(你喜歡什麼樣的方式)