2012-01-17 182 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.';