2014-10-30 100 views
0

我試圖寫一些查詢來響應地操縱MySQL數據,但Sublime Text 2顯示查詢在我想要之前就結束了。請看下面:爲什麼這些引用以Sublime Text 2結尾PHP查詢?

$query = "INSERT INTO `users` (`email`, `password`) VALUES('".mysqli_real_escape_string($link, $_POST['email'])."','".md5(md5($_POST['email'].$_POST['password']))."')"; 

逗號和右括號應該是白色的。

再次,這裏是同一個問題:

$query = "SELECT * FROM `users` WHERE `email`='".mysqli_real_escape_string($link, $_POST['login-email'])."' AND `password`='".md5(md5($_POST['login-email'].$_POST['login-password']))."'"; 

我有一個非常困難的時候搞清楚如何編寫代碼,這樣我可以確保它不是在我的腳本中的錯誤。

任何幫助,將不勝感激。

+0

恐怕只是簡單地在這裏粘貼文本對診斷問題並不是很有幫助,尤其對於那些沒有崇高文本的人來說。也許截圖可能適合在這裏? – SirDarius 2014-10-30 14:51:42

+0

除了密碼的可疑哈希,你的代碼看起來不錯。也許這只是Sublime中的一個錯誤? Stackoverflow似乎正確地突出代碼(雖然在PHP代碼風格,而不是PHP/SQL混合)。 – Halcyon 2014-10-30 14:52:19

+0

使用準備好的語句,當傳入動態參數/變量時,您不必分解查詢: http://php.net/manual/en/mysqli.quickstart.prepared-statements.php – 2014-10-30 14:54:14

回答

0

我相信這是Sublime語法突出顯示的限制。請注意,在這兩個查詢中,SQL語法高亮在字符串連接的第一個實例之後立即結束。如果您想要更全面地突出顯示SQL語句,則可能需要考慮使用預準備語句。例如:

$stmt = $mysqli->prepare("INSERT INTO `users` (`email`, `password`) VALUES (?, ?)"); 
$stmt->bind_param($_POST['email'], md5(md5($_POST['email'].$_POST['password']))); 
$stmt->execute(); 
$stmt->close(); 

這種方法也會否定手動轉義字符串的必要性。

或者,你可能要考慮使用字符串插值代替concatentation。這似乎也沒有涉及SQL語法突出顯示。

0

腳本中沒有錯誤。突出顯示在我的Sublime Text中看起來非常好。 您連接了幾次文本,並且雙引號"之外的代碼突出顯示肯定會與雙引號內的不同。然而,寫在一個更好的方法的代碼,你可以考慮以下幾點:

$email = mysqli_real_escape_string($link, $_POST['email']); 
$pass = md5(md5($_POST['email'].$_POST['password'])); 
$query = "INSERT INTO `users` (`email`, `password`) VALUES('$email','$pass')"; 

而同樣爲select命令。