[英]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.