понедельник, 5 марта 2018 г.

Пара забавных ситуаций или вести с полей

Вообщем, хочу рассказать о трудовых буднях п(р)ограммиста. Всего 2 случая из моей личной практики, которые имели место быть не так давно. И в обоих случаях пришлось по дурости потупить немного ) Итак.

1. Есть некий сервис A, который принимает HTTP-запрос, обрабатывает его особым образом и выдает некий результат.  В некоторых (достаточно редких) случаях сервис A в процессе обработки обращается к сервису B.  Эти случаи задаются комбинацией полей в БД для заданной учетной записи. Так вот, тестировал работу сервиса А локально. И долго не мог понять, почему данный конкретный запрос отваливается по таймауту. Пока через NN минут не догадался посмотреть, какова комбинация полей для локальной учетки в БД, от которой выполнется запрос. Разумеется, именно для этой записи требовалось обрашение к сервису B. А сервис B у меня на локальной машине не был запущен по определенным причинам. В общем, ситуация простая, но я долго не мог сообразить, что происходит.  В какой-то момент даже была мысль, что что-то случилось с апачом )

2. Нужно сделать запись некоторой информации в БД. Использую PHP-расширение MySQL PDO. Чтобы не изобретать велосипед, просто скопировал код процесса  инициализации/создания экзмпляра класса PDO из другого проекта. Всего несколько строк. Все, вроде бы, идет хорошо. И тут в какой-то момент понимаю, что данные в БД не пишутся. То есть, все действия выполняются правильно, PHP-функции возвращают корректные результаты и правильное количество обработанных строк, но в phpMyAdmin вижу, что совершенно нет никаких изменений в БД ! Попробовал выполнить запрос из консоли phpMyAdmin - все работает. То есть, проблема где-то в коде.. Была мысль, что просто не в ту БД пишу. Проверил конфиг, который использовался для подключения к БД. Все данные правильные, то есть, правильный сервер, БД, правильная таблица. Потихоньку начал сходить с ума ) Теперь развязка: в скопированном мной коде был такой фрагмент среди прочих параметров настройки подключения:

    $opt = array(
       [..]
        \PDO::ATTR_AUTOCOMMIT         => false,
      [...]
    );
Обратите внимание, что выключен автокоммит в БД. Когда я добавил использование транзакций и выполнил коммит для текущей транзакции после всех своих манипуляций с БД, все заработало.  !!! )))

Даже не знаю, какой из всего этого вывод. Наверное, постараться держать голову холодной (если такое вообще возможно в нашей работе =)) и не пороть горячку. В общем, всем спокойных трудовых будней )