Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana]Problem z wywołaniem procedury składowanej mysql
Forum PHP.pl > Forum > PHP > Frameworki
askone
Hej

Wydaje mi się, że rzuciłem się z motyką na słońce, ale chciałem postępować tak jak zawsze robię przy bazach MSSQL i C#...

Zachciało mi się w aplikacji korzystać z procedur składowanych w bazie mysql. Procedury te pobierają odpowiednie parametry po czym zwracają wynik działania - I tutaj pojawia się problem smile.gif

Mam coś takiego:
  1. DROP PROCEDURE IF EXISTS sp_NewAuthor; DELIMITER //
  2. CREATE PROCEDURE sp_NewAuthor ( IN fName VARCHAR(25), IN lName VARCHAR(50), OUT result INT)
  3. MODIFIES SQL DATA
  4. BEGIN
  5. IF fName <> '' AND lName <> '' THEN
  6. IF NOT EXISTS (SELECT id FROM authors WHERE firstName = fName AND lastName = lName) THEN
  7. INSERT INTO authors VALUES (NULL, fName, lName);
  8. SELECT LAST_INSERT_ID() INTO result;
  9. END IF;
  10. END IF;
  11. END//
  12. DELIMITER ;


I to działa jeśli wywołuję z poziomu mySQL'a.

Ponieważ aplikacja powstaje w oparciu o framework Kohana korzystam z klasy Database i metody query. Robię to tak:
  1. $this->db->query('call sp_NewAuthor(?, ?, $result)', $fName, $lName)


Oczywiście w zmiennych $fName i $lName mam właściwe wartości.

W odpowiedzi dostaję błąd:
There was an SQL error: OUT or INOUT argument 3 for routine books.sp_NewAuthor is not a variable or NEW pseudo-variable in BEFORE trigger - call sp_NewAuthor('jacek', 'popielczyk', $result)

Wiem, że to z mySQL ale brakuje mi już pomysłów jak to ugryźć - może ktoś już spotkał się z takim problemem i wie jak go rozwiązać smile.gif

Z góry dziękuje za odpowiedzi i wszelkie sugestie smile.gif

Edit:
Udało mi się zlikwidować błąd mysql poprzez zapisanie query w poniższy sposób:
  1. $this->db->query('call sp_NewAuthor(?, ?, @result)', $fName, $lName)


Niestety gdy wyświetlam wartość zwracaną poprzez var_dump zawsze otrzymuję 0, pomimo iż powinienem otrzymać id wstawionego rekordu. Może teraz ktoś ma jakieś pomysłu smile.gif
phpion
Chyba musisz potem zrobić:
  1. SELECT @result;
askone
Dzięki za sugestię - sprawdzę to rozwiązanie jak tylko wrócę do domu smile.gif

Edit:
Sprawdziłem podaną sugestię i ... nie działa sad.gif. Mogę powiedzieć, że rozwiązanie to działa perfekcyjnie w MySQL Managerze, niestety nie działa z poziomu PHP i Kohana.

Próbowałem tak:
Kod
$this->db->query('call sp_NewAuthor(?, ?, @result); select @result;', $fName, $lName);

i tak:
Kod
$this->db->query('call sp_NewAuthor(?, ?, @result);', $fName, $lName);
$this->db->query('select @result;');


W pierwszym przypadku otrzymuję błąd składniowy, w drugim zapytania działają, ale efekt jest żaden...

Liczę na pomoc, a sam nadal pytam Wujka Dobra Rada winksmiley.jpg
phpion
Nie pytaj wujaszka tylko zajrzyj do dokumentacji Kohany:
http://docs.kohanaphp.com/libraries/database/result#current
  1. $this->db->query('SELECT @result AS result;')->current()->result;
askone
Dzięki smile.gif

Ale właśnie miałem się pochwalić, że też do tego doszedłem smile.gif
Zrobiłem to tak:
Kod
$this->db->query('call sp_NewAuthor(?, ?, @result);', $fName, $lName);
$result = $this->db->query('SELECT @result;')->result_array();
var_dump($result['result']);


Pozdrawiam
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.