0

ループに入れた理由は、指定した月の各日に特定のデータを追加したいためです。したがって、ループは「n」回実行されます。ここで、n は 1 か月の日数です。Heres 私のコード: $i = 0;

    while ($i < $loop_count) {

        $day_prefix = $i + 1;
        if (strlen($day_prefix) == 1) {
            $day_prefix = "0" . $day_prefix; //this gives 2012-01-01 through to 2012-01-31
        }

        if ($stmt = $sql_con->prepare("UPDATE DailyBudget SET amount = ? 
                                            WHERE date=?, code=?")) {
            $stmt->bind_param('isi', $budget_daily, $date_iterator . $day_prefix, $code);
            $stmt->execute();
            $stmt->close();

        }else
            echo "fail! </br>";

        $i++;
    }
$sql_con->close();        
}

私はこれを理解しようとするよりも多くの時間を費やしたので、いくつかの助けをいただければ幸いです!

前もって感謝します。

4

3 に答える 3

1

あなたの主な問題はwhere 条件にあると思います。where 条件は、更新される行ごとに true と評価される式です。として、コンポーネント/サブ条件は、論理演算子を使用して where 条件で組み合わせる必要があります。つまり、where 句/条件でANDコンマ ( ) の代わりに使用します。,

コードを次のように変更することを検討してください。

if ($stmt = $sql_con->prepare('UPDATE DailyBudget SET amount = ? WHERE date=? AND code=?')) {
    $year = 2012;
    $month = 1;
    $days_in_month = (int) date('d',(mktime(0,0,0,$month+1,1,$year)-86400));
    $day = 1;
    while ($day <= $days_in_month) {

        $budget_daily = 15.75 - .25 * $day;
        $code = 1;

        $date = $year.'-'.str_pad($month,2,0,STR_PAD_LEFT).'-'.str_pad($day,2,0,STR_PAD_LEFT);
        $stmt->bind_param('dsi', $budget_daily, $date, $code); 
        $stmt->execute();

        $day++; 
    }   
    $stmt->close();
}
else echo 'WARNING: There was an error with the prepare: '.$sql_con->error."\n";
$sql_con->close();
于 2012-07-17T22:06:21.030 に答える
1

その場で値を作成し、挿入ごとにステートメントを準備するのbind_valueではなく、使用する必要があるようです。bind_paramあなたはbind_param次のようなものを試す必要があります

$i = 0;
$stmt = $sql_con->prepare("UPDATE DailyBudget SET amount = ? WHERE date=?, code=?");
$stmt->bind_param('isi', $budget_daily, $date_iterator_prefix, $code);
while ($i < $loop_count) {
    $day_prefix = $i + 1;
    if (strlen($day_prefix) == 1) {
        $day_prefix = "0" . $day_prefix; //this gives 2012-01-01 through to 2012-01-31
    }
    $date_iterator_prefix = $date_iterator . $day_prefix;
    $stmt->execute();

    $i++;
}
$stmt->close();               
$sql_con->close();        
于 2012-07-17T21:20:13.057 に答える
0

実際、準備済みステートメントの利点は、一度準備すれば何度も実行できることです。

したがって、ループの前に準備を配置する必要があります。

$sth = $dbh->prepare('UPDATE DailyBudget SET amount = ? WHERE date=?, code=?"');
while($i < $loop_count) {
    $sth->execute(array($budget_daily, $date_iterator.$day_prefix, $code));
}
于 2012-07-17T21:19:31.597 に答える