Друзья, привет. Подскажите пожалуйста, насколько оптимально вот такое решение. У меня сомнение вызывают момент с помещением переменной $localization_data внутрь запроса, а также способ вывода данных из полученного массива. Где то можно оптимизировать, но на ум пока ничего не приходит. PHP: function service_msg($msg) { global $pdo, $localization_data; // Объявляем используемую в функции новую переменную $service_msg_type_text = ''; // Проверяем что в переменной $localization_data находятся требуемые данные if (in_array($localization_data, array('name_russian','name_english'))) { // Подготавливаем и выполняем запрос к БД $stmt = $pdo->prepare("SELECT type, $localization_data FROM service_msg WHERE id = ? ORDER BY id DESC"); $stmt->execute([$msg]); $result = $stmt->fetchAll(); // Получаем данные из массива foreach ($result as $k => $v) { } if (isset($v['type']) && isset($v[$localization_data])) { if ($v['type']=='0') {$service_msg_type_text = 'error';} elseif ($service_msg_type_text=='1') {$service_msg_type_text = 'ok';} else {$service_msg_type_text = 'error';} $service_msg = htmlspecialchars($v[$localization_data]); echo '<p class="service_msg_'.$service_msg_type_text.'">'.$service_msg.'</p>'; } else { echo '<p class="service_msg_error">Нет описания для указанной ошибки</p>'; } } else { echo '<p class="service_msg_error">Ошибка в передаваемых данных</p>'; } }
Наверное, return, а не echo. Необходимость в CROSS JOIN под большим сомнением. --- Добавлено --- Не знаю, как в PDO, а в нативных расширениях принято освобождать $stmt.
В данном конкретном случе подготовка выполняется разово (если вынести за скобки вызов service_msg) и только в том случае, если $localization_data имеет значение из "белого списка".