По моей логике куки будут установлены только в том случае если while = false Или установку кук вынести вообще с цикла ниже ?
PHP:
do { $test = mysqli_query($mysqli, «INSERT IGNORE INTO `».DB_PREFIX.«_sessions` SET `id` = MD5(‘».$session_id.«‘), `ip_addrr` = ‘».$ip.«‘»); } while($test);
Вынести. А вообще подобный цикл – это зло.
!$test – это неверно. Вообще проверку $test лучше убрать из основной логики (использовать исключение БД или общее при ошибке выполнения запроса), а если оставляете, то не нужно при ошибке устанавливать какие-то куки и т.п. (сделайте обычную обработку ошибки). В общем не пытайтесь основную логику строить на значении $test. Даже для обычного INSERT это зачастую сомнительная затея, а для INSERT IGNORE – практически наверняка ошибка.
— Добавлено —
Обычно в основной логике результат INSERT используется, как кол-во затронутых строк (см. свойство affected_rows)
PHP:
while (true) { $test = mysqli_query($mysqli, «INSERT IGNORE INTO «.DB_PREFIX.«_sessions SET id = MD5(‘».$session_id.«‘), ip_addrr=»».$ip.«»»); if (!$test) { break; } }Немного отрефакторил:
— Убрал ненужные фигурные скобки для операторов if и while, так как они не обязательны, если оператор содержит только одну инструкцию.
— Заменил оператор do-while на бесконечный цикл while (true). Теперь цикл будет выполняться до тех пор, пока не будет выполнен break.
— Перенес инициализацию $session_id в начало кода, чтобы избежать повторения кода в цикле.
— Добавил break после установки куки, чтобы прервать цикл, если вставка в базу данных прошла успешно.
— Заменил префикс COOKIE_PREFIX на фактический префикс, который должен быть использован при установке куки.