请教mysql_real_escape_string的工作过程,调用它时会实时的向mysql发出请求吗?另:请各位详细对比一下几个函数的区别,和他们的使用场景:addcslashesaddslashesmysql_real_escape_stringmysql_escape_string

解决方案 »

  1.   

    显然mysql_real_escape_string不会向mysql发出请求,这个只会在PHP程序处理,不涉及数据库操作。
      

  2.   

    string addslashes ( string str )
    返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。 string addcslashes ( string str, string charlist )
    返回字符串,该字符串在属于参数 charlist 列表中的字符前都加上了反斜线。此函数对 \n、\r 等进行转义。
    string mysql_real_escape_string ( string unescaped_string [, resource link_identifier] )
    将 unescaped_string 中的特殊字符转义,并计及连接的当前字符集,因此可以安全用于 mysql_query()。mysql_real_escape_string() 并不转义 % 和 _mysql_escape_string
    和 mysql_real_escape_string() 完全一样,除了 mysql_real_escape_string() 接受的是一个连接句柄并根据当前字符集转移字符串之外。mysql_escape_string() 并不接受连接参数,也不管当前字符集设定。
      

  3.   


    mysql_real_escape_string的调用,必须要求已经连接了mysql啊,否则报错。所以,请问mysql_real_escape_string工作时,是否会与服务器进行交互,由此带来性能上的影响?否则的话,为了安全的写入数据到数据库,只需mysql_real_escape_string就足够了?还需要其他几个类似函数吗,他们又适合在什么场合使用?
    当我直接调用时mysql_real_escape_string,报
    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established
    <?php
    echo mysql_real_escape_string("a'bc");
    ?>
      

  4.   

    要求必须连接mysql,只是要告诉php,我是针对当前的连接句柄进行设置,而不是其他的连接,这个相当于面向对象里面的,对象封装,不会影响其他的连接设置。
      

  5.   

    有些理解了mysql_real_escape_string通过连接检查一下所用的字符集,然后进行安全字符过滤。那么请问,mysql_real_escape_string过滤已经足够安全了吗,是否还需要做其他的过滤?
      

  6.   

    应该够了。不过我建议的方式是mysqli->bind_param
      

  7.   


    我也提倡参数化的方式来做,不过在php+mysql中,碰到一个严重的问题,它的参数绑定是匿名的,且在无法确定参数个数时无法使用----bind_param函数的工作方式。看到一些人对bind_param封装,就干写死脆定义了10个或者20个最大绑定参数个数。总感觉很不爽。不知道楼上有好的解决方法吗?