这个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']));
答案 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”)只能产生一个数字?