php mysql_real_escape_string构建安全的SQL语句

时间:2016-07-23
php mysql_real_escape_string函数用于转义sql语句中的特殊字符,从而避免SQL注入攻击,本文章向大家介绍php使用mysql_real_escape_string函数构建安全的SQL语句,需要的朋友可以参考一下。

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 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()函数在本实例的主要作用:

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