繁体   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