MySql数据库-查询插入数据时转义函数的使用
Posted 阿木工作室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql数据库-查询插入数据时转义函数的使用相关的知识,希望对你有一定的参考价值。
最近在看一部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语句执行的过程中起到保护作用,并不会对结果产生影响。
将过滤函数贴出来。
1 function check_input($value) 2 { 3 // 去除斜杠 4 if (get_magic_quotes_gpc()) 5 { 6 $value = stripslashes($value); 7 } 8 // 如果不是数字则加引号 9 if (!is_numeric($value)) 10 { 11 $value = mysql_real_escape_string($value); 12 } 13 return $value; 14 }
以上是自己的理解,与大家分享,如果有误还请大家批评指正。
以上是关于MySql数据库-查询插入数据时转义函数的使用的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 mysql 准备好的语句比使用常见的转义函数更安全?
试图将文本函数插入QUERY - 如何在这种情况下转义字符串?
在一个查询中使用 MySqlCommand 将多条记录插入 MySQL C# (MySQLConnector) & command 转义引号的参数