代码(新手):
if(isset($_POST['selection']))
{
include_once 'pdo_init.php';
$params_str = str_repeat('?,',count($_POST['selection']));
$params_str = substr($params_str,0,-1);
$res = $pdo->prepare('DELETE FROM funcionario WHERE codigo in ('.$params_str.')');
if($res->execute($_POST['selection']))
{
return json_encode(array(
'success' => 1,
'msg' => 'os registros foram deletados com sucesso!'
));
} else {
return json_encode(array(
'success' => 0,
'msg' => 'nao admitimos sql-injection aqui seu safado!'
));
}
} else {
# error out
break;
}发布于 2011-05-05 01:27:15
老生常谈地说,不,它不是100%安全的(这通常是从准备好的语句中获得的)。这是因为在内部使用MySQL,PDO emulates prepared statements。这意味着数据被转义,因此对于PDO (至少使用默认设置),使用预准备语句比转义没有任何好处。
您可以通过在连接上设置PDO::setAttribute(PDO::ATTR_EMULATE_PREPARES, 0)来更改此设置。
MySQLi确实使用了真正的预准备语句,所以我建议您改用它。
发布于 2011-05-05 01:08:29
发布于 2011-05-05 01:13:40
只要允许用户删除表中的所有行,它似乎是安全的(因为如果用户愿意,她可以发送一个包含表中所有codigo的帖子)。
这是不可能欺骗您的查询触及其他表。
https://stackoverflow.com/questions/5887113
复制相似问题