2
$createDate = mktime(0,0,0,10,28,date("Y"));
$selectedDate =  date('d-m-Y', ($createDate));
$active = 0;
$sql = "UPDATE Session SET Active = ? WHERE SessionDate <= ?";                                         
$update = $mysqli->prepare($sql);
$update->bind_param("is", $active, $selectedDate);  
$update->execute();

10月28日(今日)ごとに「アクティブ」フィールドが0に設定されると述べたCRONジョブを実行しているため、上記のコードを正しく設定したとは思いません。

問題は、今年の10月28日以降であっても、データベース内のすべての行のアクティブフィールドが「0」に設定されていることです。

以下は、ハッピングされると想定されるものです。

  • 現在の年は2012年であるため、10月28日(現在)になると、この日付より前の「SessionDate」の試験は「Active」値が「0」になり、他の試験は「Active」のままになります。 「1」の値。

  • その後、CRONは、来年の10月28日になるまでその仕事をしません。今回は、明らかに2013年になります。同じルールが、この日付より前の「SessionDate」の「Active」値が「Active」であるすべての試験に適用されます。 0、他の試験の「アクティブ」値は「1」のままです。

  • その後、CRONは、翌年の10月28日になるまでその仕事をしません。今回は、明らかに2014年になります。同じルールが、この日付より前の「SessionDate」の「Active」値が「Active」であるすべての試験に適用されます。 「0」の場合、他の試験の「アクティブ」値は「1」のままです。

等々....

では、CRONが少しずつ実行しているときに、データベースのすべての行の「アクティブ」フィールドが0に設定されるのはなぜですか。

4

1 に答える 1

1

これが機能しなかった理由は、日付構造がデータベースの日付構造と一致しなかったためです。

私のphpスクリプトでは、次のように取得しました。

$selectedDate =  date('d-m-Y', ($createDate));

次のようになります。

$selectedDate =  date('Y-m-d', ($createDate));
于 2012-10-28T01:49:22.003 に答える