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

use*_*617 5 php sql mysqli

我读过无数文章,但想知道是否有人可以用通俗易懂的方式向我解释其中的区别?我知道它们都可以防止 SQL 注入并且是为了安全。但如果我使用 mysqli 来运行查询,或者 my_sql_query 的老式方式,我使用哪一个真的很重要吗?无论如何,它们不是都是 sql 函数的包装器吗?

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

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

$db->query("INSERT INTO users (first_name) VALUES ('$test')");
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 4

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

不过,通常应该避免使用它们,而应选择准备好的声明

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

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

mysqli_real_escape_string($test));
Run Code Online (Sandbox Code Playgroud)

您可能还有其他问题,但是:

  1. 将其注入 SQL$test 后就可以逃脱
  2. 您不对返回值执行任何操作。

这应该在构建 SQL 字符串之前进行:

$test = mysqli_real_escape_string($link, $test);
Run Code Online (Sandbox Code Playgroud)