-1

日付 (ymd) に基づいてデータベースで従業員のステータスを設定しようとしています。それが 2 週間前で、何かを行うために 1 週​​間の制限を設定した場合、ステータスは変わるはずです。私はこれでそれをしていました:

$newsql = "update csvdata set status =:newstatus where statuschangedate < NOW() - INTERVAL :atf DAY AND username =:mem";
                $newgetcsvuser = $DBH->prepare($newsql);
                $newgetcsvuser->execute(array(':newstatus' => $newStatus, ':atf' => $memATF, ':mem' => $csvusername));

これを実行すると、何らかの理由で動作しません。なぜそうしないのか混乱していますか?

編集:

したがって、echo "working";これの最後に追加すると、ページのエラー、内部エラーが表示されます。

編集:

これが全体です...

$date = date("Y-m-d"); 
$newStatus = "Non-Active - Driver Chose Non-Compliance";

    $sql = "SELECT username,ATF FROM members";
    $getcsvuser = $DBH->prepare($sql);
    $getcsvuser->execute();
    while($row = $getcsvuser->fetch(PDO::FETCH_ASSOC)){

        $memusername = $row['username'];
        $memATF = $row['ATF'];

        if ($memATF != 0 || $memATF != "0")
        {


        $tsql = "SELECT username,status,memberview ,statuschangedate,customernotes FROM csvdata WHERE memberview =:user";
        $tgetcsvuser = $DBH->prepare($tsql);
        $tgetcsvuser->execute(array(':user' => $memusername));
        while($trow = $tgetcsvuser->fetch(PDO::FETCH_ASSOC)){

            $csvstatus = $trow['status'];
            $csvusername = $trow['username'];
            $csvdate = $trow['statuschangedate'];
            if($csvstatus == "Open" || $csvstatus == "Enrolled - Policyholder Follow-Up Required" || $csvstatus == "Enrolled - Employee Follow-Up Required" || $csvstatus == "Non-Active - Insurance Cancelled" || $csvstatus == "Non-Active, Unable to Monitor - Incidental Business use Exclusion" || $csvstatus == "Non-Active - Employee Not Covered Under Listed Policy" || $csvstatus == "Non-Active - PolicyHolder Cancelled Additional Interest")
            {
                $notes = $trow['customernotes'];
                $notes = $csvstatus . " - ATF. " . $notes;

                $tsql="UPDATE csvdata SET customernotes=:notes =:date WHERE username=:tusername";
                $tsth=$DBH->prepare($tsql);
                $tsth->execute(array(':notes' => $notes,':tusername' => $csvusername));

                $newsql = "update csvdata set status =:newstatus where username =:mem and statuschangedate < DATE_SUB(NOW(), INTERVAL :atf DAYS)";
                //$newsql = sprintf('update csvdata set status =:newstatus where statuschangedate < NOW() - INTERVAL %d DAY AND username =:mem', $memATF);
                $newgetcsvuser = $DBH->prepare($newsql);
                $newgetcsvuser->execute(array(':newstatus' => $newStatus, ':atf' => $memATF, ':mem' => $csvusername));
                echo "working";
                $ynewsql = "update csvdata set statuschangedate =:date where username =:mem";
                $ynewgetcsvuser = $DBH->prepare($ynewsql);
                $ynewgetcsvuser->execute(array(':date' => $date, ':mem' => $csvusername));


            }


        }
        }

    }
4

3 に答える 3

0

私の記憶が正しければ、PDO で INTERVAL .. DAY のパラメーターを使用することはできません (私の記憶違いかもしれませんが)。

もしそうなら、それをintval()何かでサニタイズし、生のSQLに含める必要があります。

たとえば、整数sprintf('%d')に強制するためにサニタイズします。$memATF

$newsql = sprintf('update csvdata set status =:newstatus where statuschangedate < NOW() - INTERVAL %d DAY AND username =:mem', $memATF);
于 2013-04-16T21:07:26.560 に答える
-1

やあ、私はそれを修正しました。理由は次のとおりです。$tsql="UPDATE csvdata SET customernotes=:notes =:date WHERE username=:tusername";注意し...:notes =:date....て、取り出したところ、=:date今では完璧に機能します:)

于 2013-04-16T21:39:46.747 に答える