SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.11.2014 00:18:51

remizovvv
Участник
Зарегистрирован: 12.11.2014
Сообщений: 2

Обработка ошибок в подготовленном запросе (PREPARE/EXECUTE)

Добрый день! Столкнулся с проблемой:
Имеется подготовленный запрос:

       

SET @query = CONCAT("create temporary table `temp_table` as (SELECT * FROM `myTable` WHERE `id` IN (",`inParamsListId`,")  GROUP BY `id`)");
       
        PREPARE replaced_pages FROM @query;
   
        EXECUTE replaced_pages;


`inParamsListId` - входной параметр хранимой процедуры, в которой это все выполняется.

Собственно проблема - хочется как-то отлавливать, произошла ли ошибка во время подготовки или выполнения запроса, чтобы вернуть в итоге в php обработанный мною ответ.
Грубо говоря, если `inParamsListId` = '1, 2, 56, 93', то все ОК. Но если `inParamsListId` = 'sdfsdФвафВ!!№3 9гв в', то запрос не отработает  и выдастся ошибка, перехватив которую, я мог бы организовать нечто подобное: select 'ERROR_BAD_ID_LIST' as result from dual;

Очень надеюсь на ваши советы.

Неактивен

 

#2 12.11.2014 22:32:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Обработка ошибок в подготовленном запросе (PREPARE/EXECUTE)

Что-нибудь такое?


DELIMITER ;;
CREATE PROCEDURE doit (a VARCHAR(10))
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION SELECT 'Error' AS result;
    SET @a = CONCAT('SELECT ', a, ' AS result');
    PREPARE stmt FROM @a;
    EXECUTE stmt;
END;;
DELIMITER ;



[uboontie] root test > CALL doit('1');
+--------+
| result |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

[uboontie] root test > CALL doit('blah');
+--------+
| result |
+--------+
| Error  |
+--------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
 



И почему не проверить ошибку прямо в PHP?

Неактивен

 

#3 18.11.2014 12:50:27

remizovvv
Участник
Зарегистрирован: 12.11.2014
Сообщений: 2

Re: Обработка ошибок в подготовленном запросе (PREPARE/EXECUTE)

paulus, огромное вам спасибо, это именно то что нужно! Извините что с таким опозданием отвечаю.
Ошибку я разумеется проверю и в php, и в js, который фходные данные будет слать. Просто хочу контролировать на каждом этапе входящие данныеsmile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson