MySql数据库-查询、插入数据时转义函数的使用
2017-05-30 14:53
726 查看
最近在看一部php的基础视频教程,在做案例的时,当通过用户名查询用户信息的时候,先使用了转义函数对客户提交的内容进行过滤之后再交给sql语句进行后续的操作。虽然能看到转义函数本身的作用,但是仍然有一些疑惑。
疑惑一:当转义数据后,数据中会增加一些反斜杠,为了能查找出对应的数据,那么原来存在数据库中的数据是不是也已经被保存成含有反斜杠的了?
疑惑二:转义数据后再向数据库中插入数据,保存在数据库中的数据是否会含有过滤后的反斜杠?
带着这些疑问对用户提交的表单进行测试。
echo get_magic_quotes_gpc(); // 获取当前 magic_quotes_gpc的配置选项设置,如果开启了就会返回1,否则返回0
$title = $_POST['title'];
$sql = insert into news(`title`) values('". $title ."');
如果不适用mysql_real_escape_string()转义函数,当接收的数据中包含单引号时就会引起sql错误。
$title = mysql_real_escape_string($_POST['title']);
转义过后再进行插入数据就不会出现上面的问题,而且插入到数据库中的数据和输入时的一样,不会带有转义时增加的反斜杠。
当查询数据时,也是按照输入时的内容与数据库进行比较,也能查询出相应的结果。
由此推论,mysql_real_escape_string()转义函数只在sql语句执行的过程中起到保护作用,并不会对结果产生影响。
将过滤函数贴出来。
以上是自己的理解,与大家分享,如果有误还请大家批评指正。
疑惑一:当转义数据后,数据中会增加一些反斜杠,为了能查找出对应的数据,那么原来存在数据库中的数据是不是也已经被保存成含有反斜杠的了?
疑惑二:转义数据后再向数据库中插入数据,保存在数据库中的数据是否会含有过滤后的反斜杠?
带着这些疑问对用户提交的表单进行测试。
echo get_magic_quotes_gpc(); // 获取当前 magic_quotes_gpc的配置选项设置,如果开启了就会返回1,否则返回0
$title = $_POST['title'];
$sql = insert into news(`title`) values('". $title ."');
如果不适用mysql_real_escape_string()转义函数,当接收的数据中包含单引号时就会引起sql错误。
$title = mysql_real_escape_string($_POST['title']);
转义过后再进行插入数据就不会出现上面的问题,而且插入到数据库中的数据和输入时的一样,不会带有转义时增加的反斜杠。
当查询数据时,也是按照输入时的内容与数据库进行比较,也能查询出相应的结果。
由此推论,mysql_real_escape_string()转义函数只在sql语句执行的过程中起到保护作用,并不会对结果产生影响。
将过滤函数贴出来。
function check_input($value) { // 去除斜杠 if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // 如果不是数字则加引号 if (!is_numeric($value)) { $value = mysql_real_escape_string($value); } return $value; }
以上是自己的理解,与大家分享,如果有误还请大家批评指正。
相关文章推荐
- MySql数据库-查询、插入数据时转义函数的使用
- 使用OPENDATASOURCE 函数,在查询中实现从ACCESS获取数据,并插入SQLSERVER2000表中
- 使用OPENDATASOURCE 函数,在查询中实现从ACCESS获取数据,并插入SQLSERVER2000表中
- 使用java连接mysql数据库进行数据的查询插入更新及删除
- mysql数据库中插入数据时转义函数addslashes()
- java语言利用MySQL数据库自带的DATE_SUB()函数查询一周、一个月、半年、一年之内的数据记录
- [DB][ORACLE][统计函数]使用LAG和LEAD函数可以在一次查询中取出同一字段的前N行的数据和后N行的值
- mysql 使用查询子句插入数据
- 不允许从数据类型 ntext 到 varchar 的隐性转换。请使用 CONVERT 函数来运行此查询
- Mysql数据库使用concat函数执行SQL注入查询
- 使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据
- 使用JDBC在MySQL数据库中快速批量插入数据
- T-SQL操作语句之数据查询(二):查询中使用函数
- 关于 “不允许从数据类型 sql_variant 到 uniqueidentifier 的隐式转换。请使用 CONVERT 函数来运行此查询“的最终解决
- php连接mysql数据库(查询,插入数据)
- SQL数据插入字符串时转义函数
- 使用OleDb向acces插入数据或者查询数据发生INSERT INTO 语法错误
- SQL SERVER2000教程-第五章 处理数据 第十六节 使用CHARINDEX函数代替Like进行数据查询
- 不允许从数据类型 nvarchar 到 varbinary 的隐式转换。请使用 CONVERT 函数来运行此查询
- Sqlserver使用排名函数Row_Number()函数查询指定范围的数据