Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Procedura a sprawdzenie w niej istnieje rekordu
Mephis
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

Ostrzeżenie: (0%)
-----


Witam.

Posiadam taką tablę:
  1. CREATE TABLE `test`.`test` ( `id` INT NOT NULL , `user` INT NOT NULL , `type` ENUM('a','b','c') NOT NULL ) ENGINE = InnoDB;
  2. INSERT INTO `test` (`id`, `user`, `type`) VALUES ('1', '123', 'a'), ('2', '321', 'b');


I taką procedurę:
  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `procedura_testowa`(OUT `result` VARCHAR(32), IN `userid` INT(4), IN `type` ENUM('a','b','c'))
  2. BEGIN
  3. SET @qTest = (SELECT `id` FROM `test` WHERE (`user` = userid) AND (`type` = type));
  4.  
  5. IF (@qTest) THEN
  6. SET result = 'jest';
  7. ELSE
  8. SET result = 'nie ma';
  9. END IF;
  10. END


Kiedy wykonam zapytanie:
  1. SELECT `id` FROM `test` WHERE (`user` = 123) AND (`type` = 'a')

Otrzymuję wynik, gdyż taki rekord jest w bazie danych. Kiedy zmieniłbym `type` na np. 'c', to nie otrzymałbym wyniku.
Na tej podstawie sprawdzam w procedurze, czy otrzymałem jakiś wynik (czy znaleziono taki rekord).

Kiedy wykonuję procedurę:
  1. CALL `procedura_testowa`(123, 'c')

Otrzymuję wynik "jest", co nie jest zgodne ze skryptem.

Czy ktoś mnie oświeci, gdzie znajduje się błąd?
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Zmień nazwy parametrów. Być może jest tak dlateggo, że w zapytaniu
SELECT `id` FROM `test` WHERE (`user` = userid) AND (`type` = type)
to type bez ` i tak jest traktowane jak nazwa kolumny, a nie parametr, czyli sprawdza, czy wartość w kolumnie jest równa samej sobie... (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Mephis
post
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

Ostrzeżenie: (0%)
-----


Problem rozwiązany częściowo.. Okazało się, że nie mogę w procedurze używać SELECT szukając w nich kolumn o wartościach ENUM.

Dlaczego tak się dzieje? Przy normalnym zapytaniu otrzymuję wynik bądź nie - w zależności czy rekord o podanych właściwościach istnieje.
W procedurze jednak to już nie działa, gdyż jak się okazuję porównanie kolumny ENUM do jakiejkolwiek wartości skutkuje zwróceniem prawdy.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.09.2025 - 13:19