Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
PHP PDO - непонятные Exception
|
|||
|---|---|---|---|
|
#18+
Есть такой фрагмент: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. При выполнении этого кода вызывается исключение, причем с нулевым кодом ошибки ($e->getCode = 0). Не могу понять, почему? Вроде бы нулевой код означает отсутствие ошибок, откуда же тогда исключение? И еще в одном месте: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. На ->execute вылетает исключение с SQLSTATE=HY093. Текст SQL-запроса ошибок не содержит: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Параметры передаются как ассоциированный массив (в $params). ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2015, 23:16 |
|
||
|
PHP PDO - непонятные Exception
|
|||
|---|---|---|---|
|
#18+
Alibek B.Параметры передаются как ассоциированный массив (в $params).Количество и имена параметров точно соответствуют запросу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2015, 01:06 |
|
||
|
PHP PDO - непонятные Exception
|
|||
|---|---|---|---|
|
#18+
Да, оказалось что один параметр не передавался. Я думал, что PDO тогда им null назначает. Исправил. Исключение с кодом 0 на commit в описании ссылается на то, что нет действующей транзакции, хотя я ее начинал. Как исправить пока не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2015, 07:16 |
|
||
|
PHP PDO - непонятные Exception
|
|||
|---|---|---|---|
|
#18+
С Exception тоже разобрался. Но в ситуации не разберусь. У меня выполняется SQL-запрос с INSERT. Выполняется успешно, судя по коду возврата. Однако в БД строка не появляется. Вот фрагмент кода: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. вот отладочный вывод с этого кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. SQL-запрос корректный. Параметры заданы. PDOStatement создался нормально и возвращает true, то есть запрос выполнился успешно. Но в БД почему-то пусто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 14:48 |
|
||
|
PHP PDO - непонятные Exception
|
|||
|---|---|---|---|
|
#18+
Разобрался. Нужно было делать closeCursor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 16:05 |
|
||
|
PHP PDO - непонятные Exception
|
|||
|---|---|---|---|
|
#18+
Подскажите, как правильно сделать. Есть класс-обертка для работы с БД через PDO. Упрощенно он примерно такой: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Здесь метод query подготавливает и выполняет запрос, а затем возвращает его. Вызывающий код с этим подготовленным запросом делает что-нибудь: получает атрибуты, фетчит данные. Или ничего не делает, если это не select-запрос (а, например, insert или delete). В вызывающем коде этот метод используется например так: Код: php 1. 2. 3. Но вот именно этот код работать не будет. В данном коде из-за незакрытого курсора не отрабатывает commit и изменения откатываются. Но при этом не вызывается исключение (что ИМХО баг PDO), поэтому проблему сразу и не понять. Нужно делать так: Код: php 1. 2. 3. 4. или Код: php 1. 2. 3. или Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Но как-то это коряво. А как это сделать кошерно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 19:11 |
|
||
|
PHP PDO - непонятные Exception
|
|||
|---|---|---|---|
|
#18+
Пишут что closeCursor для fetch был сделан, если не все запили прочитали, а надо выполнить другой запрос. А если транзакцию обернуть в try catch ничего не выкинет? Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 21:59 |
|
||
|
PHP PDO - непонятные Exception
|
|||
|---|---|---|---|
|
#18+
У меня так и сделано, транзакция внутри try. Она вроде бы успешно применяется (метод возвращает true, мои сообщения выше), но по факту откатывается, поскольку строки в БД не добавляются. Стал закрывать курсор перед commit - и все заработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 22:17 |
|
||
|
|

start [/forum/topic.php?fid=23&gotonew=1&tid=1461361]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
14ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 455ms |

| 0 / 0 |
