php mysql_real_escape_string函数用法与实例教程


Posted in PHP onSeptember 30, 2013

转义特殊字符在unescaped_string,考虑到当前字符的连接设置,以便它在的地方是安全的在mysql_query()它。如果二进制数据要插入,这个函数必须被使用

下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

语法

mysql_real_escape_string(string,connection)
参数 描述
string 必需。规定要转义的字符串。
connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。

说明

本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。

提示和注释

提示:可使用本函数来预防数据库攻击。

例子

例子 1

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
// 获得用户名和密码的代码
// 转义用户名和密码,以便在 SQL 中使用
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'"
// 更多代码
mysql_close($con);
?>

例子 2
数据库攻击。本例演示如果我们不对用户名和密码应用 mysql_real_escape_string() 函数会发生什么:

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
$sql = "SELECT * FROM users
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'";
mysql_query($sql);
// 不检查用户名和密码
// 可以是用户输入的任何内容,比如:
$_POST['user'] = 'john';
$_POST['pwd'] = "' OR ''='";
// 一些代码...
mysql_close($con);
?>

那么 SQL 查询会成为这样:

SELECT * FROM users
WHERE user='john' AND password='' OR ''=''这意味着任何用户无需输入合法的密码即可登陆。

例子 3
预防数据库攻击的正确做法:

<?php
function check_input($value)
{
// 去除斜杠
if (get_magic_quotes_gpc())
  {
  $value = stripslashes($value);
  }
// 如果不是数字则加引号
if (!is_numeric($value))
  {
  $value = "'" . mysql_real_escape_string($value) . "'";
  }
return $value;
}
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
// 进行安全的 SQL
$user = check_input($_POST['user']);
$pwd = check_input($_POST['pwd']);
$sql = "SELECT * FROM users WHERE
user=$user AND password=$pwd";
mysql_query($sql);
mysql_close($con);
?>
PHP 相关文章推荐
Discuz! Passport 通行证整合
Mar 27 PHP
php heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
怎么在Windows系统中搭建php环境
Aug 31 PHP
10个超级有用值得收藏的PHP代码片段
Jan 22 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 24 PHP
PHP内存溢出优化代码详解
Feb 26 PHP
PHP文件上传主要代码讲解
Sep 30 #PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 #PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 #PHP
PHP设置一边执行一边输出结果的代码
Sep 30 #PHP
PHP file_get_contents设置超时处理方法
Sep 30 #PHP
PHP CURL CURLOPT参数说明(curl_setopt)
Sep 30 #PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 #PHP
You might like
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
js实现微博发布小功能
2017/01/12 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
MySQL适配器PyMySQL详解
2017/09/20 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
Python实现点云投影到平面显示
2020/01/18 Python
python转化excel数字日期为标准日期操作
2020/07/14 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
CNC数控操作工岗位职责
2013/11/19 职场文书
创建文明学校实施方案
2014/03/11 职场文书
社区居务公开实施方案
2014/03/27 职场文书
房屋买卖协议书
2014/04/10 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
元旦标语大全
2014/10/09 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年路政工作总结
2014/12/10 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers