进行查询时转义字符串的最佳方法是什么? mysql_real_escape_string()似乎不错,但我不知道如何正确使用它。
此代码是否能正常完成工作?
<?php
/* Let's say that the user types "'#""#''"\{(})#&/\€ in a textfield */
$newStr = mysql_real_escape_string($str);
$query = "INSERT INTO table username VALUES ($str)";
mysql_query($query);
?>
编辑:
现在我有了这段代码:
$email = $_POST['email'];
$displayName = $_POST['displayName'];
$pass = $_POST['pass1'];
$email = mysqli_real_escape_string($link, $email);
$displayName = mysqli_real_escape_string($link, $displayName);
$pass = mysqli_real_escape_string($link, $pass);
$insert = "INSERT INTO profiles (email, displayName, password)
VALUES ('$email', '$displayName', md5('$pass'))";
mysqli_query($link, $insert)
or die(mysqli_error($link));
但是我收到了这个错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在“”附近使用正确的语法!#!#^!“#!”#!“#^''''''在第1行
如果用户输入: '**! “##!^!” #! “*#!” #^' '''
答案 0 :(得分:7)
最好的方法是不要转义字符串,而是使用参数化查询,它会在幕后为你完成。
答案 1 :(得分:6)
使用mysql_real_escape_string
就可以了,但您需要:
$newStr
,而不是原始值$str
。试试这个:
$query = "INSERT INTO yourtable (username) VALUES ('$newStr')";
我还建议您检查mysql_query($query)
的结果,如果有错误,您可以检查错误消息:
if (!mysql_query($query))
{
trigger_error(mysql_error());
}
您还应该考虑使用MySQL的一个较新的接口。旧mysql_*
函数为deprecated,不应在新代码中使用。