Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Kohana]Problem z wywołaniem procedury składowanej mysql
askone
post
Post #1





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


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 (IMG:style_emoticons/default/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ć (IMG:style_emoticons/default/smile.gif)

Z góry dziękuje za odpowiedzi i wszelkie sugestie (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował fly474 3.03.2010, 20:57:14
Go to the top of the page
+Quote Post
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Chyba musisz potem zrobić:
  1. SELECT @result;
Go to the top of the page
+Quote Post
askone
post
Post #3





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Dzięki za sugestię - sprawdzę to rozwiązanie jak tylko wrócę do domu (IMG:style_emoticons/default/smile.gif)

Edit:
Sprawdziłem podaną sugestię i ... nie działa (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował fly474 4.03.2010, 18:03:35
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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;
Go to the top of the page
+Quote Post
askone
post
Post #5





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Dzięki (IMG:style_emoticons/default/smile.gif)

Ale właśnie miałem się pochwalić, że też do tego doszedłem (IMG:style_emoticons/default/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
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: 13.06.2026 - 15:15