mysql_real_escape_string介绍
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
mysql_real_escape_string 优于addslashes。因为 mysql_real_escape_string考虑到字符集的问题因此可以安全用于 mysql_query()。另外需要注意的是mysql_real_escape_string()不能转义%及_,只能转义一下字符:
\x00
\n
\r
\
'
"
\x1a
注意:有些时候需要将mysql_real_escape_string与mysql_set_charset一起使用。
mysql_real_escape_string语法及参数
语法:
mysql_real_escape_string(sql_str,con)
参数:
参数
描述
sql_str
必需。需要转义的SQL语句
con
可选。mysql连接标识符,如果没有设置该参数,则直接使用上一个mysql连接标识符
mysql_real_escape_string构建安全的SQL语句
本实例介绍了使用mysql_real_escape_string函数处理表单提交过来的数据,从而构建一个安全的SQL语句,避免了SQL注入攻击。
function opendatabase ($host,$user,$pass) {
try {
if ($db = mysql_connect ($host,$user,$pass)){
return $db;
} else {
throw new exception ("Sorry, could not connect to mysql.");
}
} catch (exception $e) {
echo $e->getmessage ();
}
}
/* http://www.manongjc.com/article/1241.html */
function selectdb ($whichdb, $db){
try {
if (!mysql_select_db ($whichdb,$db)){
throw new exception ("Sorry, database could not be opened.");
}
} catch (exception $e) {
echo $e->getmessage();
}
}
function closedatabase ($db){
mysql_close ($db);
}
$db = opendatabase ("localhost","root","");
selectdb ("mydatabase",$db);
$_POST['user'] = "myname";
$_POST['pass'] = "mypassword";
function validatelogin ($user,$pass){
mysql_real_escape_string ($user);
mysql_real_escape_string ($pass);
$thequery = "SELECT * FROM userlogin WHERE username='$user' AND password='$pass'";
if ($aquery = mysql_query ($thequery)){
if (mysql_num_rows ($aquery) > 0){
return true;
} else {
return false;
}
} else {
echo mysql_error();
}
}
if (validatelogin ($_POST['user'],$_POST['pass'])){
echo "You have successfully logged in.";
} else {
echo "Sorry, you have an incorrect username and/or password.";
}
closedatabase ($db);
?>
mysql_real_escape_string()函数在本实例的主要作用:
防止SQL Injection攻击,也就是你必须验证用户的输入
操作数据的时候避免不必要的字符导致错误