- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте!
У меня PHP 5.4 на Debian Testing. Заметил странное поведение pdo_firebird.
$pdo = new \PDO('firebird:dbname=localhost:basename', 'SYSDBA', 'masterkey'); //$pdo->inTransaction() = false
$pdo->prepare('SELECT * FROM tbl'); //$pdo->inTransaction() = true
$pdo->execute(); //$pdo->inTransaction() = true
$pdo->beginTransaction(); // Exception will be thrown
Почему так? Почему транзакция сама открывается при подготовке SELECT запроса? И мало того, не закрывается при завершении запроса, хотя по логике должен быть AUTOCOMMITT. В то время как с MySQL:
$pdo = new \PDO('mysql:dbname=mydb;host=localhost', 'root', 'rootpass'); //$pdo->inTransaction() = false
$pdo->prepare('SELECT * FROM tbl'); //$pdo->inTransaction() = false
$pdo->execute(); //$pdo->inTransaction() = false
$pdo->beginTransaction(); // OK
Может сталкивался кто с таким?
Почему так? Почему транзакция сама открывается при подготовке SELECT запроса?
а почему нет? "подготовка" для PDO приводит к реальному обращению к серверу. то есть, транзакция началась.
попробуйте вручную управлять автокоммитом :
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1)
и выключать его, если делаете beginTransaction. Так было бы логично. Программисты не любят сюрпризы и не тестируют их.
а почему нет? "подготовка" для PDO приводит к реальному обращению к серверу. то есть, транзакция началась.
попробуйте вручную управлять автокоммитом :
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1)
и выключать его, если делаете beginTransaction. Так было бы логично. Программисты не любят сюрпризы и не тестируют их.
Ну и если по Вашей логике, то почему в случае с MySQL, транзакция даже не начинается?
Пробовал вручную указывать автокоммитт - не помогает. После $sth->execute(), транзакция остается открытой.
Ну и если по Вашей логике, то почему в случае с MySQL, транзакция даже не начинается?
Так исходники и почитайте. Значит так решил программист.
вообще, в старых версиях mysql не было prepared statements и надстройки PDO оболочки их имитировали не отправляя запросы к серверу.