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 相关文章推荐
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
PHP多例模式介绍
Jun 24 PHP
迁移PHP版本到PHP7
Feb 06 PHP
php生成PDF格式文件并且加密
Jun 22 PHP
PHP执行SQL文件并将SQL文件导入到数据库
Sep 17 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
Apr 27 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
php获取域名的google收录示例
2014/03/24 PHP
php插入排序法实现数组排序实例
2015/02/16 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
javascript 全等号运算符使用说明
2010/05/31 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
详解Python中的from..import绝对导入语句
2016/06/21 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
python 画图 图例自由定义方式
2020/04/17 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
python适合做数据挖掘吗
2020/06/16 Python
使用PyCharm安装pytest及requests的问题
2020/07/31 Python
东方通信股份有限公司VC面试题
2014/08/27 面试题
高职助产应届生自荐信
2013/09/24 职场文书
在校学生职业规划范文
2014/01/08 职场文书
诚信考试承诺书
2014/03/27 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
单身证明范本
2015/06/15 职场文书
疾病证明书
2015/06/19 职场文书
小型婚礼主持词
2015/06/30 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
导游词之南京夫子庙
2019/12/09 职场文书