0

我把它放在一个循环中的原因是因为我想为指定月份的每一天添加特定数据,因此循环运行“n”次,其中 n 是一个月中的天数。这是我的代码: $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

似乎您应该使用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 回答
1

我认为您的主要问题是where 条件where 条件是一个表达式,对于要更新的​​每一行计算结果为真。作为表达式,组件/子条件必须通过逻辑运算符组合在 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 回答
0

实际上prepared statement的好处是它准备一次并执行多次。

所以,你必须把准备放在循环之前。

$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 回答