2012-01-17 150 views
-7
... 
    $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; 
?> 

它打印删除0行。sql删除返回删除0行

+2

是否应该删除行?你确定你的SQL是正确的吗?另外,你还没有给出一个完整的代码块。 – 2012-01-17 20:11:41

+2

$ dateBefor和$ dateAfter的值是什么?你能否确认你想删除一些行(以及它们的日期)?你可以验证他们没有被删除,问题不只是报告错误? – 2012-01-17 20:13:00

+2

愚蠢的问题......但有没有,你应该使用$ dateBefore而不是$ dateBefor任何机会呢? – 2012-01-17 20:20:30

回答

0

您的查询应该是这样的

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

也许周围无日期''。我们不知道您使用的格式和数据库接受的内容。

3

的问题是你的. 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.';