0

すべての結果が、返される最初の値の繰り返しである理由を理解できません。

このコードは、同じIDとフォーマットされた日付を何度も繰り返し返します。ただし、値を読み取ってから、DB内のエントリごとにその値を変換することを期待していました。これが私のコードです:

<?php
include('../includes/conn.inc.php');
$stmt = $mysql->prepare("SELECT id, endDate FROM TABLE ORDER BY id");
$stmt->execute();
$stmt->bind_result($id, $endDate);

while($row = $stmt->fetch()) {
    $dataRow[] = array('id'=>$id,'endDate'=> $endDate);
};

foreach($dataRow as $i) {
    $newEndDate = date('Y-m-d',strtotime($endDate));
    $sql = 'UPDATE TABLE SET startDate = ? WHERE id= ? ';
    $stmt = $mysql->stmt_init();
    if ($stmt->prepare($sql)) { 
        $stmt->bind_param('si',$newEndDate, $id);
        $OK = $stmt->execute();}
        if ($OK) {
            echo $id . " " . $newEndDate .  "done <br/>";
        } else {
            echo $stmt->error;
        } 
        $stmt->close();
    };  
4

2 に答える 2

1

あなたの中であなたは常に最後から設定された最後foreachの値を使用しています $stmt->fetch()

試す:

foreach($dataRow as $i) {
    $newEndDate = date('Y-m-d',strtotime($i['endDate']));
    $id = $i['id'];
    $sql = 'UPDATE TABLE SET startDate = ? WHERE id= ? ';
    $stmt = $mysql->stmt_init();
    if ($stmt->prepare($sql)) { 
        $stmt->bind_param('si',$newEndDate, $id);
        $OK = $stmt->execute();
    }
    if ($OK) {
        echo $id . " " . $newEndDate .  "done <br/>";
    } else {
        echo $stmt->error;
    } 
    $stmt->close();
}; 
于 2013-02-01T14:54:51.667 に答える
0

使用するget_result();

$dataRow = array()
$stmt = $mysql->prepare("SELECT id, endDate FROM TABLE ORDER BY id");
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_array()) {
    $dataRow[$row['id']] = $row['endDate'];
}

2番目のループで$endDateを入力しません

foreach($dataRow as $i => $endDate){
    $newEndDate = date('Y-m-d',strtotime($endDate));
    ... // rest of your code
于 2013-02-01T14:59:27.707 に答える