while循环更新DB中的日期只更新第一行?

时间:2009-08-06 17:26:57

标签: php mysql loops

我不知道为什么这不起作用。     


function query($sql) {

     $this->result = @mysql_query($sql, $this->conn);

     return($this->result != false);

}

function convert() { $this->db->open(); $sql_update = ""; $this->db->query("SELECT * FROM ACCOUNTS "); $str = ''; while ($row = $this->db->fetchassoc()) { $jobNum = $row['JOBNUMBER']; $old_date = $row['INSTALLDATE']; $new_date = date("Y-m-d", strtotime($old_date)); $sql_update = "UPDATE ACCOUNTS SET INSTALLDATE='$new_date' WHERE JOBNUMBER='$jobNum' "; //$this->db->query($sql_update) or die($this->response->throwResponseError(MSG_DATABASE_ERROR . mysql_error())); $str .= $jobNum . " -- " . $new_date . "
"; }

    return $str;
}

$this->result = @mysql_query($sql, $this->conn); return($this->result != false); }

如果我用该行注释掉它,它会返回我想要的所有结果。但是当我取消注释它实际运行更新的行时,它会更新第一条记录并停止循环。为什么呢?

1 个答案:

答案 0 :(得分:2)

当您运行更新时,它会使db中的隐藏语句处理以及与之关联的结果无效。

db->query("SELECT …") -- creates the handler

-- 1st iteration
db->fetchassoc() -- fetches the first row
db->query("UPDATE …") -- creates another handler and destroys the old one

-- 2nd iteration
db->fetchassoc() -- no rows returned by `UPDATE`, nothing to fetch

使用单一陈述可以更轻松地完成您要做的事情:

UPDATE  accounts
SET     installed = DATE_FORMAT(STR_TO_DATE(installed, @current_format_string), '%Y-%d-%m')

,其中@current_format_string就是您日期的格式。

<强>更新

尝试运行此查询:

UPDATE  accounts
SET     installdate = DATE_FORMAT(STR_TO_DATE(installdate , '%m/%d/%Y'), '%Y-%d-%m')

在您运行UPDATE查询之前,您可能希望使用SELECT检查结果:

SELECT  DATE_FORMAT(STR_TO_DATE(installdate, '%m/%d/%Y'), '%Y-%d-%m')
FROM    accounts