基本上我使用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语句本身的问题吗?
感谢。
答案 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作业会与自身混淆并感觉它在第一次插入完成后已经完成。我以为我会分享知识,因为我的问题已经解决了。