关于Mysql查询带单引号及插入带单引号字符串问题

 更新时间:2013年04月02日 16:45:32   作者:  
本文主要介绍的是用mysql_real_escape_string对用户提交的表单数据进行转义处理和通过addslashes以及mysql_escape_string这3个类似功能的函数用法区别
Mysql查询带引号和不带引号区别
当数据库字段ID为整型时
select ID from table where ID=1

select ID from table where ID='1'
两条sql都是可以的,但是第一条sql不用进行隐式转换,速度上比第二条sql略快一些

今天在向mysql数据库中插入带单引号字符串的时候,什么错也没报就是语句执行失败,后来才知道,单引号等要转义,可以使用函数:mysql_real_escape_string和addslashes函数;
以下做个介绍:往数据库中插入数据之前是要先转义的,在插入数据库. 

本文很好的说明了addslashes和mysql_real_escape_string的区别,虽然国内很多PHP coder仍在依靠addslashes防止SQL注入,我还是建议大家加强中文防止SQL注入的检查。addslashes的问题在于黑客可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截。

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。

另外对于php手册中get_magic_quotes_gpc的举例:
复制代码 代码如下:

<?php
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST["lastname"]);
} else {
$lastname = $_POST['lastname'];
}
?>

最好对magic_quotes_gpc已经开放的情况下,还是对$_POST['lastname']进行检查一下。
再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:
mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:
mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。
总结一下
addslashes() 是强行加;
mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;
mysql_escape_string不考虑连接的当前字符集。

相关文章

  • MySQL无法修改主键的问题分析及解决方案

    MySQL无法修改主键的问题分析及解决方案

    最近同事咨询了一个问题,TDSQL(for MySQL)中的某张表主键需要改为联合主键,是否必须先删除现有的主键?因为删除主键时,提示这个错误,所以本文给大家介绍了MySQL无法修改主键的问题分析及解决方案,需要的朋友可以参考下
    2024-01-01
  • Centos中安装多个mysql数据的配置实例

    Centos中安装多个mysql数据的配置实例

    最近因为单位项目扩充,需要在原线上数据库服务器上加装一个mysql实例(实际上就是从新编译安装一个非3306的自定义端口,不同目录的mysql),研究了一天,终于顺利搞定,这里把配置步骤发给大家,供大家学习使用
    2014-04-04
  • DBeaver连接mysql数据库图文教程(超详细)

    DBeaver连接mysql数据库图文教程(超详细)

    本文主要介绍了DBeaver连接mysql数据库图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Mysql数据库性能优化一

    Mysql数据库性能优化一

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情
    2016-04-04
  • PostgreSQL USAGE和SELECT权限案例深入分析

    PostgreSQL USAGE和SELECT权限案例深入分析

    这篇文章主要介绍了PostgreSQL USAGE和SELECT权限案例深入分析,因为项目需求,需要学习PostgreSQL,本人之前学习过MYSQL,临时快速上手,尽快的去学习项目需要PostgREST
    2023-04-04
  • mysql 事务处理及表锁定深入简析

    mysql 事务处理及表锁定深入简析

    本文将详细介绍mysql 事务处理及表锁定,需要了解更多的朋友可以参考下
    2012-11-11
  • linux下安装mysql及mysql.sock问题

    linux下安装mysql及mysql.sock问题

    最近在linux上装mysql时遇到一些棘手的问题,百思不得其解,下面小编给大家带来了linux下安装mysql及mysql.sock问题,感兴趣的朋友一起看看吧
    2018-03-03
  • MySQL计算两个日期相差的天数、月数、年数

    MySQL计算两个日期相差的天数、月数、年数

    这篇文章主要介绍了MySQL计算两个日期相差的天数、月数、年数,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Mysql中关于on,in,as,where的区别

    Mysql中关于on,in,as,where的区别

    这篇文章主要介绍了Mysql中关于on,in,as,where的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • MySQL 中 Varchar(50) 和 varchar(500) 区别介绍

    MySQL 中 Varchar(50) 和 varchar(500) 区别介绍

    网上说Varchar(50)和varchar(500)存储空间上是一样的,真的是这样吗,基于性能考虑,是因为过长的字段会影响到查询性能,本文我将带着这两个问题探讨验证一下,需要的朋友可以参考下
    2024-08-08

最新评论