loop DB tarihleri ​​güncellemek için ise sadece ilk satırı güncellemeleri?

1 Cevap php

I have no idea why this won't work.


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;
}

Ben yorumladı hattı ile çalıştırırsanız, bu i istediğiniz tüm sonuçları döndürür. Ben aslında güncelleştirme çalıştırır uncomment Ama, bu ilk kaydı günceller ve döngü durur. Neden?

1 Cevap

Güncelleştirme çalıştırdığınızda, bu db içinde gizli deyimi kroşe ve onunla ilişkili sonuçları geçersiz kılar.

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

Ne yapmaya çalışıyorsun Ne, tek bir deyimi kullanarak daha kolay yapılabilir:

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

, Burada @current_format_string sizin tarihleri ​​şimdi biçimlendirilmiş nasıl olduğunu.

Update:

Bu sorguyu çalıştırmayı deneyin:

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

Eğer UPDATE sorguyu çalıştırmadan önce, sizinle sonuçlarını kontrol etmek isteyebilirsiniz SELECT:

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