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

时间:2014-02-21 14:35:02

标签: 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')");

2 个答案:

答案 0 :(得分:4)

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

但通常应该避免使用prepared statements

  

为什么以下代码不起作用?

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

mysqli_real_escape_string($test));

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

  1. 您在 中将其注入SQL
  2. 之后逃离$test
  3. 您不会对返回值执行任何操作。
  4. 这应该在构造SQL字符串之前进行:

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

答案 1 :(得分:0)

除了 Quentin 所说的:

两种相同的输出。

<强> mysql_real_escape_string

$ link是mysqli_real_escape_string必须的。

<强> mysql_real_escape_string

$ link是可选的

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