Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Procedura a sprawdzenie w niej istnieje rekordu
Forum PHP.pl > Forum > Bazy danych > MySQL
Mephis
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?
mmmmmmm
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... smile.gif
Mephis
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.