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 相关文章推荐
一个域名查询的程序
Oct 09 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
elgg 获取文件图标地址的方法
Mar 20 PHP
取得单条网站评论以数组形式进行输出
Jul 28 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 PHP
php生成随机颜色的方法
Nov 13 PHP
smarty内置函数config_load用法实例
Jan 22 PHP
php数组随机排序实现方法
Jun 13 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
程序员的表白神器“520”大声喊出来
May 20 PHP
php解决DOM乱码的方法示例代码
Nov 20 PHP
php的instanceof和判断闭包Closure操作示例
Jan 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递归创建和删除文件夹的代码小结
2012/04/13 PHP
js判断变量是否未定义的代码
2020/03/28 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
基于python实现微信模板消息
2015/12/21 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
django query模块
2019/04/20 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
社区活动总结报告
2014/05/05 职场文书
优秀团支部申报材料
2014/12/26 职场文书
团日活动总结格式
2015/05/11 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
MySQL系列之二 多实例配置
2021/07/02 MySQL
详解Vue slot插槽
2021/11/20 Vue.js
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript