Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранимые процедуры, Выборка множества значений одной строки 
:(
    Опции темы
Axiom
Дата 15.12.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2011

Репутация: нет
Всего: нет



Доброго!
По воле случая столкнулся с хранимыми процедурами.
Со вставкой данных разобрался, а вот с их выборкой никак не получается.

Создаю процедуру:
Код

DROP PROCEDURE IF EXISTS `checKey`;

CREATE PROCEDURE `checKey` (INOUT email VARCHAR(50), IN `key` CHAR(32), OUT id INT, OUT password VARCHAR(30), OUT fullname VARCHAR(30))
    BEGIN
        SELECT id, email, password, fullname FROM table WHERE `key` = `key` AND email = email LIMIT 1;
    END


Вызываю процедуру следующим образом:
Код

$this->db->query("SET @email = '".$email."'");
$this->db->query("SET @key = '".$key."'");

$res = $this->db->query("CALL checKey(@email, @key, @id, @password, @fullname)")->fetch();
var_dump($res);


В результате возвращается:
Код

array(1) { ["id"] => NULL, ["email"] => [email protected], ["password"] => NULL, ["fullname"] => NULL }


Помогите разобраться.

Это сообщение отредактировал(а) Axiom - 15.12.2011, 11:08
PM MAIL   Вверх
Akina
Дата 15.12.2011, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Твоя процедура выбирает поля, но не помещает их в переменные.
http://dev.mysql.com/doc/refman/5.5/en/select-into.html


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Axiom
Дата 15.12.2011, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2011

Репутация: нет
Всего: нет



Перевел запрос к такому виду:
Код

SELECT id, email, password, fullname INTO @id, @email, @password, @fullname FROM table WHERE `key` = `key` AND email = email LIMIT 1;


Получаю ошибку: ERROR: SQLSTATE[HY000]: General error

Это сообщение отредактировал(а) Axiom - 15.12.2011, 12:09
PM MAIL   Вверх
Akina
Дата 15.12.2011, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



А теперь Вы делаете выборку в неявно определяемые локальные переменные... а неявное определение переменных у Вас, вероятно, отключено.

Цитата(Axiom @  15.12.2011,  13:06 Найти цитируемый пост)
Получаю ошибку: ERROR: SQLSTATE[HY000]: General error

Это сообщение НЕ является сообщением MySQL. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Axiom
Дата 15.12.2011, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2011

Репутация: нет
Всего: нет



Цитата(Akina @  15.12.2011,  12:52 Найти цитируемый пост)
А теперь Вы делаете выборку в неявно определяемые локальные переменные... 

Т.е. нужно их заранее объявить?
Код

 SET @id = 0, @email = ''... etc;
 SELECT id, email, password, fullname INTO @id, @email, @password, @fullname FROM table WHERE `key` = `key` AND email = email LIMIT 1;


Просто, я так уже пробовал, но результат такой же, General Error.


Это сообщение отредактировал(а) Axiom - 15.12.2011, 13:03
PM MAIL   Вверх
Akina
Дата 15.12.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Axiom, Вы принципиально намерены плодить хренову тучу переменных с идентичными именами, а потом не понимать, поле Вы используете или переменную, а если переменную - то какую именно... ?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Axiom
Дата 15.12.2011, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2011

Репутация: нет
Всего: нет



А разве это критично, использовать одноименные столбцам переменные?

Понятно ведь, что, допустим, id - это столбец, а @id - это переменная.

Это сообщение отредактировал(а) Axiom - 15.12.2011, 13:09
PM MAIL   Вверх
Akina
Дата 15.12.2011, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Axiom @  15.12.2011,  14:07 Найти цитируемый пост)
Понятно ведь, что, допустим, id - это столбец

Можно, я напомню:

Цитата(Axiom @  15.12.2011,  12:07 Найти цитируемый пост)
Код

OUT id INT,




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Axiom
Дата 15.12.2011, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2011

Репутация: нет
Всего: нет



Akina, я извиняюсь, но я не понял при чем тут OUT id INT.

Пробовал также:
Код

CREATE PROCEDURE `checKey` (IN email VARCHAR(50), IN `key` CHAR(32), OUT out1 INT, OUT out2 VARCHAR(30), OUT out3 VARCHAR(30))
    BEGIN
        SET @out1 = 0, @out2 = '', @out3 = '';
        SELECT id, password, fullname INTO @out1, @out2, @out3 FROM table WHERE `key` = `key` AND email = email LIMIT 1;
    END


Вызываю так:
Код

SET @email = $email;
SET @key = $key;
CALL checKey(@email, @key, @out1, @out2, @out3)


Но всё-равно получаю General Error.

Это сообщение отредактировал(а) Axiom - 15.12.2011, 15:14
PM MAIL   Вверх
Akina
Дата 15.12.2011, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Код

DROP PROCEDURE IF EXISTS `checKey`;

DELIMITER //

CREATE PROCEDURE `checKey` (INOUT p_email VARCHAR(50), IN p_key CHAR(32), OUT p_id INT, OUT p_password VARCHAR(30), OUT p_fullname VARCHAR(30))
    BEGIN
        SELECT id, email, password, fullname INTO p_id, p_email, p_password, p_fullname FROM table WHERE `key` = p_key AND email = p_email LIMIT 1;
    END;//

DELIMITER ;


Код

SET @email = '[email protected]';
SET @key = '12345';

CALL checKey(@email, @key, @id, @password, @fullname);

SELECT @email, @key, @id, @password, @fullname;

Вот что-то типа так...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Axiom
Дата 15.12.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2011

Репутация: нет
Всего: нет



Akina, премного благодарен Вам.  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.