ds有点像有线设计。请注意,动态SQL生成除了可能容易受到攻击之外,还可能导致错误代码和调试噩梦。从PHP 5.3.0开始,它将抛出一个异常,并编辑以添加try/catch。谢谢,我感觉很糟糕。你的回答是唯一回答这个问题的。是DateTime将阻止SQL注
ds有点像有线设计。请注意,动态SQL生成除了可能容易受到攻击之外,还可能导致错误代码和调试噩梦。从PHP 5.3.0开始,它将抛出一个异常,并编辑以添加try/catch。谢谢,我感觉很糟糕。你的回答是唯一回答这个问题的。是DateTime将阻止SQL注,php,Php,ds有点像有线设计。请注意,动态SQL生成除了可能容易受到攻击之外,还可能导致错误代码和调试噩梦。从PHP 5.3.0开始,它将抛出一个异常,并编辑以添加try/catch。谢谢,我感觉很糟糕。你的回答是唯一回答这个问题的。是DateTime将阻止SQL注入。达哈泽的回答并没有直接回答这个问题,但(在我看来)恰当地告诉你不要相信它。不要感到难过。只要接受你认为更适合你的问题的答案,就会帮助其他读者。是的,我接受了。你的回答是最好的直接回答,但我觉得其他人会更好地帮助未来的读者。谢谢你的帮助!我没
ds有点像有线设计。请注意,动态SQL生成除了可能容易受到攻击之外,还可能导致错误代码和调试噩梦。从PHP 5.3.0开始,它将抛出一个异常,并编辑以添加try/catch。谢谢,我感觉很糟糕。你的回答是唯一回答这个问题的。是DateTime将阻止SQL注入。达哈泽的回答并没有直接回答这个问题,但(在我看来)恰当地告诉你不要相信它。不要感到难过。只要接受你认为更适合你的问题的答案,就会帮助其他读者。是的,我接受了。你的回答是最好的直接回答,但我觉得其他人会更好地帮助未来的读者。谢谢你的帮助!我没有使用事先准备好的声明。这是我的主要观点。@user1032531在这种情况下,我已经使我的答案的第二部分更加突出:)+1。我试图在我的回答中说的更简洁的版本。是的,达哈泽的回答不那么简洁,但信息很棒。
$date = new DateTime($_GET['suspect_user_provided_date']);
$date->add(new DateInterval('P1D'));
$sql='SELECT * FROM table WHERE date<"'.$date->format('Y-m-d').'"';
$pdo = new PDO($dsn, $user, $pass, $options = array (
PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
));
$date = new DateTime($_GET['suspect_user_provided_date']);
$date->add(new DateInterval('P1D'));
$sql='
SELECT
*
FROM table
WHERE date < :dt';
$stmt = $pdo->prepare($sql);
$params = array (
'dt' => $date->format('Y-m-d')
);
try {
$res = $pdo->execute($params);
} catch (PDOException $e) {
echo $e->getMessage();
}
try {
$date = new DateTime($_GET['suspect_user_provided_date']);
}
catch (Exception $e) {
echo "Error";
exit;
}
$date->add(new DateInterval('P1D'));
$sql='SELECT * FROM table WHERE date<"'.$date->format('Y-m-d').'"';
$stmt = $db->prepare('SELECT * FROM table WHERE `date` < :now');
$stmt->execute(array(
':now' => $date->format('Y-m-d'),
));
// safe
$date = new DateTime($_GET['suspect_user_provided_date']);
$date->add(new DateInterval('P1D'));
$sql='SELECT * FROM table WHERE date<"'.$date->format('Y-m-d').'"';
// failing
$date = new DateTime($_GET['suspect_user_provided_date']);
$date->add(new DateInterval('P1D'));
$sql='SELECT * FROM table WHERE date<"'.$date->format('\O\"\h\a\i \t\o\d\a\y \i\s Y-m-D').'"';
// not failing, whatever format you are using, using pdo::quote
$date = new DateTime($_GET['suspect_user_provided_date']);
$date->add(new DateInterval('P1D'));
$sql='SELECT * FROM table WHERE date<'.$dbh->quote($date->format('\O\"\h\a\i \t\o\d\a\y \i\s Y-m-D'));
// not failing, whatever format you are using, using prepared statments
$stmt = $dbh->prepare('SELECT * FROM table WHERE date < :date');
$date = new DateTime($_GET['suspect_user_provided_date']);
$date->add(new DateInterval('P1D'));
$stmt->bindValue(':date', $date->format('\O\"\h\a\i \t\o\d\a\y \i\s Y-m-D'), PDO::PARAM_STR);
$stmt->execute();