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()不能转义%及_,只能转义一下字符:

  1. \\x00
  2. \\n
  3. \\r
  4. \\
  5. '
  6. "
  7. \\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注入攻击。

<?php
  function opendata  ($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, data  could not be opened.\");
      }
    } catch (exception $e) {
      echo $e->getmessage();
    }
  }
  function closedata  ($db){
    mysql_close ($db);
  }
  $db = opendata  (\"localhost\",\"root\",\"\");
  selectdb (\"mydata \",$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.\";
  }
  
  closedata  ($db);
  
?>

mysql_real_escape_string()函数在本实例的主要作用:

  1. 防止SQL Injection攻击,也就是你必须验证用户的输入
  2. 操作数据的时候避免不必要的字符导致错误
收藏 打印