Php mysqli_real_escape_string()和mysql_real_escape_string()之间的区别

Php mysqli_real_escape_string()和mysql_real_escape_string()之间的区别,php,sql,mysqli,Php,Sql,Mysqli,我读过无数篇文章,但我想知道是否有人能用外行的语言向我解释这一区别?我知道它们都是为了防止sql注入,也是为了安全。但是如果我使用mysqli来运行查询,或者使用老式的sql查询方式,那么我使用哪种方式真的很重要吗?它们不是sql函数的包装器吗 为什么下面的代码不起作用 $test="hello, 'there"; $db->real_escape_string($test); $db->query("INSERT INTO users (first_name) VALUES (

我读过无数篇文章,但我想知道是否有人能用外行的语言向我解释这一区别?我知道它们都是为了防止sql注入,也是为了安全。但是如果我使用mysqli来运行查询,或者使用老式的sql查询方式,那么我使用哪种方式真的很重要吗?它们不是sql函数的包装器吗

为什么下面的代码不起作用

 $test="hello, 'there";
$db->real_escape_string($test);

$db->query("INSERT INTO users (first_name) VALUES ('$test')");

它们考虑了连接的当前字符集,因此它们需要能够访问连接,因此您必须使用用于打开连接的库的字符集

不过,一般来说,应该避免使用这些方法,而应该选择使用

为什么下面的代码不起作用

 $test="hello, 'there";
$db->real_escape_string($test);

$db->query("INSERT INTO users (first_name) VALUES ('$test')");
您可能有其他问题,但:

  • 将$test注入SQL后,您将其转义
  • 您不会对返回值执行任何操作 这应该在您构造SQL字符串之前进行:

    $test = mysqli_real_escape_string($link, $test);
    

    除了昆汀所说的以外:

    两种类型的输出相同

    mysql\u real\u escape\u字符串

    $link是mysqli\u real\u escape\u字符串必须的

    mysql\u real\u escape\u字符串

    $link是可选的


    如果未指定链接标识符,则使用mysql_connect()打开的最后一个链接。如果没有,则尝试打开一个没有参数的扩展。

    一个使用MySQL_*扩展,另一个使用MySQLi_*扩展。。。。但是如果您使用的是MySQLi,那么您应该使用带有绑定变量的prepared语句。因此,在查询执行之后,您添加了MySQLi_real_escape_字符串,并且它需要con作为参数!我在使用mysqli,但你能链接到任何地方阅读准备好的声明吗?这里没有真正的问题。一些本可以很容易研究的东西。投票关闭。这不应该是
    $test=mysqli\u real\u escape\u字符串($con,$test)还是你发布的内容仍然有效
    mysqli\u real\u escape\u string()
    需要数据库连接;据我所知。@Fred ii--哦,你说得对。我通常只通过DBIx::Class来处理数据库,所以我没有mysqli语法。。。听起来很有趣。我将对此进行研究。这些函数的区别没有解释