Вообщем, хочу рассказать о трудовых буднях п(р)ограммиста. Всего 2 случая из моей личной практики, которые имели место быть не так давно. И в обоих случаях пришлось по дурости потупить немного ) Итак.
1. Есть некий сервис A, который принимает HTTP-запрос, обрабатывает его особым образом и выдает некий результат. В некоторых (достаточно редких) случаях сервис A в процессе обработки обращается к сервису B. Эти случаи задаются комбинацией полей в БД для заданной учетной записи. Так вот, тестировал работу сервиса А локально. И долго не мог понять, почему данный конкретный запрос отваливается по таймауту. Пока через NN минут не догадался посмотреть, какова комбинация полей для локальной учетки в БД, от которой выполнется запрос. Разумеется, именно для этой записи требовалось обрашение к сервису B. А сервис B у меня на локальной машине не был запущен по определенным причинам. В общем, ситуация простая, но я долго не мог сообразить, что происходит. В какой-то момент даже была мысль, что что-то случилось с апачом )
2. Нужно сделать запись некоторой информации в БД. Использую PHP-расширение MySQL PDO. Чтобы не изобретать велосипед, просто скопировал код процесса инициализации/создания экзмпляра класса PDO из другого проекта. Всего несколько строк. Все, вроде бы, идет хорошо. И тут в какой-то момент понимаю, что данные в БД не пишутся. То есть, все действия выполняются правильно, PHP-функции возвращают корректные результаты и правильное количество обработанных строк, но в phpMyAdmin вижу, что совершенно нет никаких изменений в БД ! Попробовал выполнить запрос из консоли phpMyAdmin - все работает. То есть, проблема где-то в коде.. Была мысль, что просто не в ту БД пишу. Проверил конфиг, который использовался для подключения к БД. Все данные правильные, то есть, правильный сервер, БД, правильная таблица. Потихоньку начал сходить с ума ) Теперь развязка: в скопированном мной коде был такой фрагмент среди прочих параметров настройки подключения:
$opt = array(
[..]
\PDO::ATTR_AUTOCOMMIT => false,
[...]
);
Обратите внимание, что выключен автокоммит в БД. Когда я добавил использование транзакций и выполнил коммит для текущей транзакции после всех своих манипуляций с БД, все заработало. !!! ))) 1. Есть некий сервис A, который принимает HTTP-запрос, обрабатывает его особым образом и выдает некий результат. В некоторых (достаточно редких) случаях сервис A в процессе обработки обращается к сервису B. Эти случаи задаются комбинацией полей в БД для заданной учетной записи. Так вот, тестировал работу сервиса А локально. И долго не мог понять, почему данный конкретный запрос отваливается по таймауту. Пока через NN минут не догадался посмотреть, какова комбинация полей для локальной учетки в БД, от которой выполнется запрос. Разумеется, именно для этой записи требовалось обрашение к сервису B. А сервис B у меня на локальной машине не был запущен по определенным причинам. В общем, ситуация простая, но я долго не мог сообразить, что происходит. В какой-то момент даже была мысль, что что-то случилось с апачом )
2. Нужно сделать запись некоторой информации в БД. Использую PHP-расширение MySQL PDO. Чтобы не изобретать велосипед, просто скопировал код процесса инициализации/создания экзмпляра класса PDO из другого проекта. Всего несколько строк. Все, вроде бы, идет хорошо. И тут в какой-то момент понимаю, что данные в БД не пишутся. То есть, все действия выполняются правильно, PHP-функции возвращают корректные результаты и правильное количество обработанных строк, но в phpMyAdmin вижу, что совершенно нет никаких изменений в БД ! Попробовал выполнить запрос из консоли phpMyAdmin - все работает. То есть, проблема где-то в коде.. Была мысль, что просто не в ту БД пишу. Проверил конфиг, который использовался для подключения к БД. Все данные правильные, то есть, правильный сервер, БД, правильная таблица. Потихоньку начал сходить с ума ) Теперь развязка: в скопированном мной коде был такой фрагмент среди прочих параметров настройки подключения:
$opt = array(
[..]
\PDO::ATTR_AUTOCOMMIT => false,
[...]
);
Даже не знаю, какой из всего этого вывод. Наверное, постараться держать голову холодной (если такое вообще возможно в нашей работе =)) и не пороть горячку. В общем, всем спокойных трудовых будней )
Комментариев нет:
Отправить комментарий