簡體   English   中英

過去2個月(日期)的工作

[英]Working with past 2 months (date)

我正在嘗試刪除數據庫中的過去兩個月。

我正在將東西保存在數據庫中,例如date("nY");格式date("nY"); zo輸出將是8-2013

現在,我試圖像這樣刪除過去的2個月:

碼:

echo "<h2>Opruimen.</h2>";

$AFGELOPENMAAND = date("n-Y",strtotime("-1 Months"));
$AFGELOPENMAAND2 = date("n-Y",strtotime("-2 Months"));

$result = $pdo->prepare("SELECT * FROM photos WHERE geupload = $AFGELOPENMAAND OR geupload = $AFGELOPENMAAND2");
$result->execute();
$hoeveel = $result->rowCount();

if($hoeveel != 0){
    foreach($result as $row){
        unlink($row["thumb"]);
        unlink($row["location"]);

        $resultDEL = $pdo->prepare('DELETE FROM photos WHERE id = :id');
        $resultDEL->execute(array(':id' => $row["id"]));

        echo 'De vorige 2 maanden zijn verwijdert.';
        echo '<meta http-equiv="refresh" content="2; URL=admin.php">';  
    }
}else{
    echo 'Deze actie is al uitgevoerd of het is niet nodig!!';
}

但是我能和其他人一起看看他是否找到了東西。 而且它在我的數據庫中找不到行,但是其中有過去兩個月的行。

我的查詢有問題嗎?

GRZ

您必須引用在mysql中搜索的字符串,當前正在搜索month_value-year_value,它是一個負整數

你有問題...

當綁定數據更改時,不必為每次迭代准備准備好的語句:

if($hoeveel != 0){
    $resultDEL = $pdo->prepare('DELETE FROM photos WHERE id = :id'); //put it here
    foreach($result as $row){
        unlink($row["thumb"]);
        unlink($row["location"]);

        $resultDEL->execute(array(':id' => $row["id"]));

        echo 'De vorige 2 maanden zijn verwijdert.';
        echo '<meta http-equiv="refresh" content="2; URL=admin.php">';  
    }
}else{
   echo 'Deze actie is al uitgevoerd of het is niet nodig!!';
}

但是,您也可以直接刪除它們:

$result = $pdo->prepare("DELETE FROM photos WHERE geupload = $AFGELOPENMAAND OR geupload = $AFGELOPENMAAND2");
$result->execute();

經驗法則 :當您從數據庫中讀取某些內容並必須處理每一行以便產生一個數據庫查詢時,在100種情況下,有99種可以完全在數據庫中完成,從而節省了大量帶寬和時間。

編輯 AdrianBR發現了問題...不要將日期存儲為字符串。 數據庫系統擅長處理自己定義的數據類型,請使用它們。

替換為:

$result = $pdo->prepare("SELECT * FROM photos WHERE geupload = $AFGELOPENMAAND OR geupload = $AFGELOPENMAAND2");
$result->execute();

有了這個

$result = $pdo->prepare("SELECT * FROM photos WHERE geupload = '".$AFGELOPENMAAND."' OR  geupload = '".$AFGELOPENMAAND2."'");
$result->execute();

我的建議是,將您的“ geupload”字段更改為DATETIME(或DATE)字段而不是VARCHAR,使用起來要容易得多,數據庫可以像處理實際日期一樣代替字符串來處理此字段(如前所述)。

您可以像這樣刪除兩個月前的行:

DELETE FROM photos WHERE TIMESTAMPDIFF(MONTH, geupload, NOW()) > 2

您可以像這樣輕松地在此字段中插入或更新當前時間:

INSERT INTO photos (.., .., geupload) VALUES (.., .., NOW())

UPDATE photos SET geupload = NOW()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM