【问题标题】:Sql delete returns deleted 0 rows [closed]Sql delete 返回删除的 0 行 [关闭]
【发布时间】:2012-02-12 15:10:36
【问题描述】:
    ...
    $count = $conn->exec("
        DELETE FROM date_practice 
        WHERE  date between '.$dateBefor.' AND '.$dateAfter.' 
    ");

    print("Deleted $count rows.\n"); 
} catch (PDOException $e) {
    echo $sql . '<br />' . $e->getMessage();
} 
$conn = NULL; 
?>

它打印 Deleted 0 行。

【问题讨论】:

  • 应该删除行吗?你确定你的 SQL 是正确的吗?另外,您还没有给出完整的代码块。
  • $dateBefor 和 $dateAfter 的值是多少?您能否确认有一些您希望删除的行(以及它们的日期是什么)?您能否确认它们没有被删除,并且问题不仅仅是报告错误?
  • 愚蠢的问题...但是您是否有机会使用 $dateBefore 而不是 $dateBefor?

标签: php pdo


【解决方案1】:

问题是您的.s(连接运算符)在您的双引号内,因此它们被视为字符串的一部分。它发送的文字查询将如下所示:

DELETE FROM date_practice WHERE date between '.2011-01-01.' and '.2011-12-31.'

试试这个:

$count = $conn->exec(
  "DELETE FROM date_practice " .
  "  WHERE date BETWEEN '$dateBefor' AND '$dateAfter'"
);

更好的是,因为您已经在使用 PDO,请使用 prepared statements,这将为您担心变量插值并保护您免受 SQL 注入攻击:

$stmt = $dbh->prepare(
  'DELETE FROM date_practice ' .
  '  WHERE date BETWEEN :before AND :after'
);

$stmt->bindParam(':before', $dateBefor);
$stmt->bindParam(':after',  $dateAfter);

$stmt->execute();

echo 'Deleted ', $stmt->rowCount(), ' rows.';

【讨论】:

    【解决方案2】:

    您的查询应如下所示

    $count = $conn->exec("DELETE FROM date_practice WHERE  date between '$dateBefor' and '$dateAfter' ");
    

    也许日期前后没有''。我们不知道您使用什么格式以及您的数据库接受什么格式。

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      相关资源
      最近更新 更多