我不知道为什么这不起作用.
function query($sql) {
$this->result = @mysql_query($sql, $this->conn); return($this->result != false); }
function convert(){
$这 - > DB->打开();
$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)或die($this-> response-> throwResponseError(MSG_DATABASE_ERROR.mysql_error()));
$str.= $jobNum. “ - ”. $new_date. “”;
}return $str; }
如果我用注释掉的那一行运行它,它会返回我想要的所有结果.但是当我取消注释它实际运行更新的行时,它会更新第一条记录并停止循环.为什么?
最佳答案 当您运行update时,它会使db中的隐藏语句hander以及与之关联的结果无效.
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