我读过无数文章,但想知道是否有人可以用非专业术语来解释我的差异?我知道他们都防止sql注入,并为安全。但是如果我使用mysqli运行查询,或者my_sql_query的老式方式,我使用哪一个真的很重要吗?对于sql函数来说,它们不是两个包装器吗?
为什么以下代码不起作用?
$test="hello, 'there";
$db->real_escape_string($test);
$db->query("INSERT INTO users (first_name) VALUES ('$test')");
答案 0 :(得分:4)
他们考虑了连接的当前字符集,因此他们需要能够访问连接,因此您必须使用一个用于打开连接的库。
但通常应该避免使用prepared statements。
为什么以下代码不起作用?
$test="hello, 'there";
$db->query("INSERT INTO users (first_name) VALUES ('$test')",
mysqli_real_escape_string($test));
您可能还有其他问题,但是:
$test
这应该在构造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()打开的最后一个链接。如果没有,那么尝试打开一个没有参数。