gpt4 book ai didi

php - while 循环更新数据库中的日期只更新第一行?

转载 作者:可可西里 更新时间:2023-11-01 07:38:13 25 4
gpt4 key购买 nike

我不知道为什么这行不通。


function query($sql) {<p></p>

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

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

}
</code></pre>

<p>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 . "<br/>";
}</p>

<pre><code> return $str;
}
</code></pre>

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

最佳答案

当您运行更新时,它会使您的 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

关于php - while 循环更新数据库中的日期只更新第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1240305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com