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();