逃脱字符串的最佳使用和实践
可能重复:
防止PHP中的SQL注入的最佳方法
查询时转义字符串的最佳方式是什么? 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行附近使用正确的语法附近的“!”#!##^!“#!”#!“#^'''''''
如果用户输入:'**!“#!#^!”#!“*#!”#^''''
最好的方法是不要逃避字符串,而是使用参数化查询,这会在幕后为您完成。
像这样使用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_*
函数已弃用,不应在新代码中使用。