Почему mysqli_fetch_assoc сообщает об исключении из вложенного циклаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Почему mysqli_fetch_assoc сообщает об исключении из вложенного цикла

Сообщение Anonymous »

Я использую следующий пример кода:

Код: Выделить всё

$ca=$db->query('SELECT * FROM `clients`');
while ($c=$ca->fetch_assoc())
{
try {
$mysqli->query('ALTER TABLE `client_'.$c['id'].'_data` ADD COLUMN `updated` datetime DEFAULT NULL');
}catch (Exception $e) {
// handling/ignoring the exception
}
}
Итак, в этом случае в таблице некоторых клиентов уже есть «обновленный» столбец, а в некоторых нет.
Поэтому, когда в одной из таблиц уже есть этот столбец, я получаю исключение как и ожидалось, что я затем игнорирую. Но когда я игнорирую эту ошибку в строке 4 - после возникновения исключения - когда цикл пытается выполнить следующий $c=$ca->fetch_assoc - скрипт вылетает с тем же исключением
Я получаю что-то подобное

Код: Выделить всё

Fatal error: Uncaught mysqli_sql_exception: Duplicate column .....
Stack trace:
#0 /home/api/www/test.php(2): mysqli_result->fetch_assoc()
#1 {main} thrown in /home/api/www/test.php on line 2
Это исключение не имеет ничего общего с кодом $c=$ca->fetch_assoc(). Это связано с запросом внутри цикла, и я обрабатываю это исключение, но похоже, что оно каким-то образом хранится в стеке ошибок mysqli, и следующий fetch_assoc видит его, и скрипт аварийно завершает работу.
Конечно, я могу запретить использование fetch_assoc в цикле, но не хочу, потому что во многих случаях у меня есть такие конструкции и я не хочу использовать большие массивы для хранения в них всех результатов .
Почему это происходит и что я могу сделать, чтобы это исправить?

Подробнее здесь: https://stackoverflow.com/questions/784 ... ested-loop
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»