簡體   English   中英

插入選擇僅在初始運行時插入一行,但之后每次都可以

[英]Insert into select only inserts one row on initial run but is fine each time afterwards

基本上,我使用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作業。 如果需要更多代碼,我們很樂意提供,歡迎您的幫助。

cron作業使用curl運行,因為數據位於其他服務器上。

這可能與curl通過cron最初發送數據的方式有關嗎? 還是SQL語句本身存在問題?

謝謝。

請注意,是否為date_Added一個日期字段或時間戳? 在MySQL中是不一樣的,因為針對時間戳的date(“ Ymd”)會被弄亂,可能是您的問題所在

嘗試改變

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

$today = date("Y-m-d H:i:s");

有了您提供的信息,這是我唯一想到的

該語句的問題確實與我$today使用$today的方式有關,但與上述方式無關。 通過更改將數據插入數據庫的MySQL語句解決了該問題:

這個:

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

需要更改為:

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

其中$date_24_hours是: $date_24_hours = date('Ym-d', strtotime($today . ' -1 day'));

這里需要在兩個日期之間進行比較,否則cron作業會與自身混淆,並感覺到它在第一次插入完成后就已經完成了。 因為我的問題已經解決,所以我只是想分享知識。

暫無
暫無

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

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