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中批量替换文件名的实现代码
Jul 20 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
关于crontab的使用详解
Jun 24 PHP
php curl选项列表(超详细)
Jul 01 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
May 30 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
PHP单例模式模拟Java Bean实现方法示例
Dec 07 PHP
PHP序列化和反序列化深度剖析实例讲解
Dec 29 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
Laravel 5框架学习之用户认证
2015/04/09 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
Kali Linux安装ipython2 和 ipython3的方法
2019/07/11 Python
python障碍式期权定价公式
2019/07/19 Python
简单了解Django ContentType内置组件
2019/07/23 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
教师调动申请报告
2015/05/18 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
教你怎么用Python生成九宫格照片
2021/05/20 Python