sprintf()如何防止SQL注入?

Ruk*_*tel 5 php mysql sql-injection

我听说sprintf()可以防止SQL注入.这是真的吗?如果是这样,怎么样?

为什么人们建议写这样的查询:

$sql = sprintf('SELECT * FROM TABLE WHERE COL1 = %s AND COL2 = %s',$col1,$col2);
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 9

这没有任何保护.使用sprintfmake来获得更易读的代码然后放入和退出字符串以运行mysql_real_escape_string每个变量......但是该示例不会在末尾转义变量,从而失去优势.

如果你想要体面的保护,请使用提供绑定参数的东西.

  • 为'self_real_escape_string` +1,LOL.:d (8认同)

bea*_*ode 9

sprintf不会保护!它只取代了%s

你必须mysql_real_escape_string所以:

$sql = sprintf('SELECT * FROM TABLE WHERE COL1 = "%s" AND COL2 = "%s"',
mysql_real_escape_string($col1),
mysql_real_escape_string($col2));
Run Code Online (Sandbox Code Playgroud)

是更安全的注射

注意:我想你看看PDO,这就是我喜欢用于DBconections和查询的东西