в то время как цикл обновления дат в БД обновляет только первую строку? - PullRequest
4 голосов
/ 06 августа 2009

Понятия не имею, почему это не сработает.


function query($sql) {</p>

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

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

}

функция 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 = "ОБНОВЛЕНИЯ УЧЕТНЫХ ЗАПИСЕЙ УСТАНОВИТЬ 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;
}

Если я запускаю его с закомментированной строкой, он возвращает все результаты, которые я хочу. Но когда я раскомментирую строку, на которой фактически выполняется обновление, он обновляет первую запись и останавливает цикл. Почему?

1 Ответ

2 голосов
/ 06 августа 2009

Когда вы запускаете обновление, оно делает недействительным скрытый оператор в вашем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...