插入到选择中仅在初始运行时插入一行,但之后每次都很好

时间:2015-09-15 09:28:24

标签: php mysql curl cron

基本上我使用php和mysql来扩展邮件客户端的功能,数据使用curl发送到我的服务器,然后输入到我的数据库中的表A,然后我选择表A中的所有数据如果日期匹配如此,则匹配今天的日期并将其插入表B中:

$date = $_POST['dateAdded'];
        $today = date("Y-m-d");

        if ($date === $today) {

            $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sql="INSERT INTO `$tableB` (`$fields`) SELECT * FROM $tableA WHERE date_Added='$today'";
            $link->exec($sql);

在此IF语句中还有其他代码,但我觉得它与问题无关。我知道这个代码还有其他问题,比如没有转发帖子值等,但这是我将在不久的将来解决的问题。问题是每当这段代码作为cron作业的一部分运行时,它只会在$ tableB中插入一行,但是当我清除tableB和一个与tableA匹配$ today的值并重新运行代码时,它每次都会运行(即如果我运行的话)它手动),唯一不起作用的是通过cron作业。如果还有其他需要的代码,我很乐意提供,欢迎任何帮助。

使用curl运行cron作业,因为数据位于不同的服务器上。

这可能与curl最初通过cron发送数据的方式有关吗? 或者这是SQL语句本身的问题吗?

感谢。

2 个答案:

答案 0 :(得分:0)

小心点,是de date_Added一个日期字段还是时间戳?在MySQL中,是不一样的,因为你的日期(" Y-m-d")对时间戳会被搞砸,可能会出现问题

尝试改变

?- delete([1,2,0,3,4,0,5],0,R). R = [1, 2, 3, 4, 5].

$today = date("Y-m-d")

使用您提供的信息是唯一想到的内容

答案 1 :(得分:0)

这句话的问题确实存在于我使用$today的方式,而不是上述方式。通过更改将数据插入数据库的MySQL语句来解决问题:

这:

$sql="INSERT INTO $ tableB的( $字段) SELECT * FROM $tableA WHERE date_Added='$today'";

需要更改为:

$sql="INSERT INTO $ tableB的( $字段) SELECT * FROM $table WHERE date_Added between '$date_24_hours' AND '$today'";

$date_24_hours的位置:$date_24_hours = date('Y-m-d', strtotime($today . ' -1 day'));

需要在这两个日期之间进行比较,否则cron作业会与自身混淆并感觉它在第一次插入完成后已经完成。我以为我会分享知识,因为我的问题已经解决了。