За последние 24 часа нас посетили 22382 программиста и 1032 робота. Сейчас ищут 652 программиста ...

Насколько оптимально решение PDO+подготовленный запрос

Тема в разделе "PHP и базы данных", создана пользователем SBAlex, 20 апр 2022.

  1. SBAlex

    SBAlex Новичок

    С нами с:
    20 апр 2022
    Сообщения:
    26
    Симпатии:
    1
    Друзья, привет. Подскажите пожалуйста, насколько оптимально вот такое решение. У меня сомнение вызывают момент с помещением переменной $localization_data внутрь запроса, а также способ вывода данных из полученного массива. Где то можно оптимизировать, но на ум пока ничего не приходит.

    PHP:
    1. function service_msg($msg)
    2.     {
    3.     global $pdo, $localization_data;
    4.  
    5.     // Объявляем используемую в функции новую переменную
    6.     $service_msg_type_text = '';
    7.  
    8.     // Проверяем что в переменной $localization_data находятся требуемые данные
    9.     if (in_array($localization_data, array('name_russian','name_english')))
    10.         {
    11.         // Подготавливаем и выполняем запрос к БД
    12.         $stmt = $pdo->prepare("SELECT type, $localization_data FROM service_msg WHERE id = ? ORDER BY id DESC");
    13.         $stmt->execute([$msg]);
    14.         $result = $stmt->fetchAll();
    15.  
    16.         // Получаем данные из массива
    17.         foreach ($result as $k => $v) {    }
    18.  
    19.         if (isset($v['type']) && isset($v[$localization_data]))
    20.             {
    21.             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';}
    22.             $service_msg = htmlspecialchars($v[$localization_data]);
    23.  
    24.             echo '<p class="service_msg_'.$service_msg_type_text.'">'.$service_msg.'</p>';
    25.             }
    26.         else
    27.             {
    28.             echo '<p class="service_msg_error">Нет описания для указанной ошибки</p>';
    29.             }
    30.         }
    31.     else
    32.         {
    33.         echo '<p class="service_msg_error">Ошибка в передаваемых данных</p>';
    34.         }
    35.     }
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Наверное, return, а не echo. Необходимость в CROSS JOIN под большим сомнением.

    :D
    --- Добавлено ---
    Не знаю, как в PDO, а в нативных расширениях принято освобождать $stmt.
     
    #2 miketomlin, 22 апр 2022
    Последнее редактирование: 22 апр 2022
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    В данном конкретном случе подготовка выполняется разово (если вынести за скобки вызов service_msg) и только в том случае, если $localization_data имеет значение из "белого списка".