Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запрос в PDO после которого никакие запросы не проходят

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
3d_killer
Отправлено: 01 Октября, 2014 - 19:31:08
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




Странная ситуация у меня сложилась, написал инсталятор для системы, ядро устанавливает без проблем и далее начинает ставить модули которые накиданы в папки, первый устанавливает дальше не проходит, начал разбираться выводить Var_dump, echo по модулям. Все операции проходят хорошо кроме запросов.

Если идут запросы типо:
PHP:
скопировать код в буфер обмена
  1. $STH_file_manager = $DBH->prepare("DELETE FROM system_users_action,system_group_to_action USING system_users_action LEFT JOIN
  2. system_group_to_action ON
  3. system_group_to_action.action_id = system_users_action.id
  4. WHERE system_users_action.module='file_manager'");

то их хоть сколько то они нормально выполняются, если попадается запрос вида:
PHP:
скопировать код в буфер обмена
  1.  
  2. $query_file_manager="
  3. INSERT INTO system_users_action VALUES('','post_create_new_file_form','Форма создания папки или файла','0','file_manager');
  4. INSERT INTO system_users_action VALUES('','post_load_directory','Показать файлы в директории','0','file_manager');
  5. INSERT INTO system_users_action VALUES('','post_load_name_file','Форма редактирования имени файла','0','file_manager');
  6. INSERT INTO system_users_action VALUES('','post_rename_file','Переименовать файл','1','file_manager');
  7. INSERT INTO system_users_action VALUES('','post_file_manager_upload','Загрузка файлов','1','file_manager');
  8. INSERT INTO system_users_action VALUES('','post_delete_file_or_directory','Удалить файл или директорию','1','file_manager');
  9. INSERT INTO system_users_action VALUES('','post_create_new_file','Создать новый файл или папку','1','file_manager');
  10. INSERT INTO system_users_action VALUES('','post_load_file','Просмотр содержимого файла','0','file_manager');
  11. INSERT INTO system_users_action VALUES('','post_save_file','Сохранить файл после редактирования','1','file_manager');
  12. INSERT INTO system_users_action VALUES('','get_download_file','Скачать файл','1','file_manager');
  13. ";
  14. $STH_file_manager_exec = $DBH->prepare($query_file_manager);
  15.  

то сам он выполняется и в базу пишет, но после него не проходят никакие запросы, использую PDO в первый раз столкнулся с такой странностью... помогите вобщем
(Добавление)
ну конечно после:
PHP:
скопировать код в буфер обмена
  1. if($STH_file_manager_exec->execute()){echo "выполнен";}


выполнен пишет, после него запросы не выполняются
 
My status
 Top
OrmaJever Модератор
Отправлено: 01 Октября, 2014 - 19:54:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




во-первых нужно хотя бы ошибку глянуть, а во-вторых скорее всего нужно вот это https://php.net/manual/en/pdosta...t.nextrowset.php
при мульти запросах их нужно освобождать.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
3d_killer
Отправлено: 01 Октября, 2014 - 20:00:53
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




непонял как освободить
 
My status
 Top
teddy
Отправлено: 01 Октября, 2014 - 20:08:02
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




...

(Отредактировано автором: 01 Октября, 2014 - 20:19:49)

 
 Top
OrmaJever Модератор
Отправлено: 01 Октября, 2014 - 20:08:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




там же пример есть. Я это делал в mysqli, там это выглядит так
PHP:
скопировать код в буфер обмена
  1.         while ($mysqli->more_results()) {
  2.                 $mysqli->next_result();
  3.                 $mysqli->store_result();
  4.         }

судя по примеру в pdo так
PHP:
скопировать код в буфер обмена
  1. do {
  2.     $stmt->fetchAll(PDO::FETCH_NUM);
  3. } while ($stmt->nextRowset());


Не буду утверждать что это правильный подход, но когда я столкнулся с этим, то решение нашёл именно такое.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
3d_killer
Отправлено: 01 Октября, 2014 - 20:13:56
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




teddy нет первый запрос проходит и остальные за ним типо таких тоже, затык при мульти запросе
 
My status
 Top
teddy
Отправлено: 01 Октября, 2014 - 20:19:31
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Да я что то тупанул. А ошибки какие выводит?
По идее должен быть эксепшен, сделай $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

И покажи ошибку
 
 Top
3d_killer
Отправлено: 01 Октября, 2014 - 20:22:41
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




OrmaJever да вы были правы, спасибо так отработал и последующие тоже:

PHP:
скопировать код в буфер обмена
  1.  
  2. $query_file_manager="
  3. INSERT INTO system_users_action VALUES('','post_create_new_file_form','Форма создания папки или файла','0','file_manager');
  4. INSERT INTO system_users_action VALUES('','post_load_directory','Показать файлы в директории','0','file_manager');
  5. INSERT INTO system_users_action VALUES('','post_load_name_file','Форма редактирования имени файла','0','file_manager');
  6. INSERT INTO system_users_action VALUES('','post_rename_file','Переименовать файл','1','file_manager');
  7. INSERT INTO system_users_action VALUES('','post_file_manager_upload','Загрузка файлов','1','file_manager');
  8. INSERT INTO system_users_action VALUES('','post_delete_file_or_directory','Удалить файл или директорию','1','file_manager');
  9. INSERT INTO system_users_action VALUES('','post_create_new_file','Создать новый файл или папку','1','file_manager');
  10. INSERT INTO system_users_action VALUES('','post_load_file','Просмотр содержимого файла','0','file_manager');
  11. INSERT INTO system_users_action VALUES('','post_save_file','Сохранить файл после редактирования','1','file_manager');
  12. INSERT INTO system_users_action VALUES('','get_download_file','Скачать файл','1','file_manager');
  13. ";
  14. $stmt = $DBH->query($query_file_manager);
  15. do {
  16.     $rowset = $stmt->fetchAll(PDO::FETCH_NUM);
  17.     if ($rowset) {
  18.         printResultSet($rowset, $i);
  19.     }
  20.     $i++;
  21. } while ($stmt->nextRowset());
  22.  

только честно не понимаю записи
 
My status
 Top
OrmaJever Модератор
Отправлено: 01 Октября, 2014 - 20:29:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




3d_killer пишет:
только честно не понимаю записи

У самого похожая ситуация. Может какой-то Мелкий зайдёт и расскажет что к чему)) Раз работает это уже хорошо Закатив глазки


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
3d_killer
Отправлено: 01 Октября, 2014 - 20:45:09
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




согласен Улыбка , еще раз спасибо
 
My status
 Top
Мелкий Супермодератор
Отправлено: 01 Октября, 2014 - 21:07:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




OrmaJever пишет:
Может какой-то Мелкий зайдёт и расскажет что к чему))

Может быть даже не какой-то, а вполне определённый. Да, может быть. Сейчас посовещаемся, может быть кто-нибудь из нас хочет высказаться...

Сначала пишут непонятно что, потом удивляются, почему оно непонятно как и работает. Если вы не знаете, почему это работает, вероятно, оно и не работает на самом деле.

Ммм, не тот Мелкий получил право голоса, да?

Никогда не доводилось делать мультизапросы. Всё равно их надо оборачивать в транзакцию - так какая разница? Зато удобнее понимать, какой именно запрос исключение бросил, удобнее обрабатывать результаты (или оные результаты игнорировать, тоже удобнее).
Раз уж делаете prepare - то и отделите запрос на запись и используйте его несколько раз с нужными данными.
Что за магия с nextRowset? Каждый запрос из пачки может быть select'ом, каждый select может возвращать разные количества строк и столбцов. Более того, тут могут быть намешаны всякие insert'ы, update - т.е. совершенно разные результаты всего api объекта. А так сказал nextRowset - и получил следующий ответ на запрос. Вполне логичный вариант. И как показано выше, mysqli делает по факту то же самое.


-----
PostgreSQL DBA
 
 Top
teddy
Отправлено: 01 Октября, 2014 - 21:12:42
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Вопросы отпали. Я допетрил, наконец-то.

(Отредактировано автором: 01 Октября, 2014 - 22:14:02)

 
 Top
OrmaJever Модератор
Отправлено: 01 Октября, 2014 - 21:24:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Мелкий пишет:
Может быть даже не какой-то, а вполне определённый. Да, может быть. Сейчас посовещаемся, может быть кто-нибудь из нас хочет высказаться...

Сначала пишут непонятно что, потом удивляются, почему оно непонятно как и работает. Если вы не знаете, почему это работает, вероятно, оно и не работает на самом деле.

Ммм, не тот Мелкий получил право голоса, да?

Нет, это тот самый Мелкий который нам и нужен! Закатив глазки
А по теме я не совсем понял. Да, запросов много и что бы получить доступ к результатам каждого нужно использовать nextRowset, это логично. Но почему не получаеться сделать последующие запросы пока все результаты не пройдёшь? Это уже не логично, хотя может не так понял.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
3d_killer
Отправлено: 02 Октября, 2014 - 07:38:42
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




Мелкий мне тоже дошло, спасибо
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB