这个MySQL语句在PHP脚本中的安全性如何?

时间:2009-07-29 15:52:07

标签: php mysql security sql-injection

这个MySQL语句在PHP中构建的安全性如何?是否容易受到SQL注入?

$sql = sprintf("INSERT IGNORE INTO my_table VALUES(%d, %d, 1, NOW())", 
                 mysql_escape_string($_SESSION['client']['id']), 
                 mysql_escape_string($_POST['id']));

3 个答案:

答案 0 :(得分:3)

是的,因为%d只会产生一个不需要转义字符串的数字。使用单引号也可以提高速度。所以安全快捷的方式是:

$sql = sprintf('INSERT IGNORE INTO my_table VALUES(%d, %d, 1, NOW())', $_SESSION['client']['id'], $_POST['id']);

答案 1 :(得分:1)

不,它不应该是脆弱的。

以下是有关如何在 PHP 中保护 SQL 查询的详细文章。

http://www.tech-evangelist.com/2007/11/05/preventing-sql-injection-attack/

答案 2 :(得分:1)

对我来说很好看。

实际上,在这种情况下是否需要使用mysql_escape_string,因为sprintf(“%d”)只能产生一个数字?