2014-10-30 65 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命令。