我不知道为什么这不起作用。
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); }
如果我用该行注释掉它,它会返回我想要的所有结果。但是当我取消注释它实际运行更新的行时,它会更新第一条记录并停止循环。为什么呢?
答案 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