Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP + procedura MySQL
werk
post 8.02.2009, 19:35:24
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 18.02.2007

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


Witam...

Mam pewien problem.
Rozumiem ze procedury w mysql dostępne sa od wersji 5 i zeby z nich korzystać trzeba używac mysqli_....
Tak więc mam kod:

  1. <?php
  2. $link = mysqli_connect("localhost","root","");
  3. mysqli_select_db($link, "cms");
  4.  
  5. $proc = "
  6. DROP PROCEDURE IF EXISTS pobierz();
  7. DELIMITER
  8. CREATE PROCEDURE pobierz (out nazwa VARCHAR(50))
  9. BEGIN
  10.    SELECT nazwa_dzialu INTO nazwa FROM dzial LIMIT 0, 1;
  11. END
  12.  
  13. DELIMITER;";
  14.  
  15. mysqli_query($link, $proc);
  16.  
  17. if ($w = mysqli_multi_query($link, "CALL pobierz();"))
  18. {
  19.    if ($result = mysqli_store_result($link))
  20.    {
  21.          while ($row = mysqli_fetch_row($result))
  22.          {
  23.                print($row[0]);
  24.          }
  25.    }else print('ERROR P2!');
  26. }else print('ERROR P1!');
  27. ?>


tabela w bazie to:

id INT
nazwa_dzialu VARCAR(50)
io INT

Jak powinien wygladac kod zeby poprawnie wywolac procedure ?
I czy procedura jest dobrze napisana ?

Ten post edytował werk 8.02.2009, 19:35:52
Go to the top of the page
+Quote Post
wrzasq
post 8.02.2009, 20:00:20
Post #2





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


no to zacznij uzywac SQLa, a nie instrukcji klienta MySQL. DELIMITER do niczego ci nie jest potrzebny, on mowi standardowemu klientowi MySQL czym rozdzielac komendy.

  1. <?php
  2. mysqli_query($link, 'DROP PROCEDURE IF EXISTS pobierz()');
  3. mysqli_query($link, 'CREATE PROCEDURE pobierz (out nazwa VARCHAR(50))
  4. BEGIN
  5.    SELECT nazwa_dzialu INTO nazwa FROM dzial LIMIT 0, 1;
  6. END');
  7. ?>


poza tym w tym wypadku nie potrzebujesz BEGIN ... END - jedna instrukcje mozesz zapisac bez tego smile.gif.

Ten post edytował wrzasq 8.02.2009, 20:01:21


--------------------
Go to the top of the page
+Quote Post
werk
post 8.02.2009, 22:03:39
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 18.02.2007

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


Niestety dalej to samo ... wykonanie zapytania kończy się niepowidzeniem:

Oto kod:

  1. <?php
  2. mysqli_query($link, 'DROP PROCEDURE IF EXISTS pobierz()');
  3. if(mysqli_query($link,"CREATE PROCEDURE pobierz (out nazwa VARCHAR(50))
  4. BEGIN
  5.   SELECT nazwa_dzialu INTO nazwa FROM dzial LIMIT 0, 1;
  6. END") == false) { print('głupia procedura nie działa :/'); die(); }
  7.  
  8. if ($w = mysqli_query($link, "CALL pobierz() "))
  9. {
  10.    if ($result = mysqli_store_result($link, $w))
  11.    {
  12.          while ($row = mysqli_fetch_assoc($result))
  13.          {
  14.                print($row['nazwa']);
  15.          }
  16.    }else print('ERROR P2!');
  17. }else print('ERROR P1!');
  18. ?>


Może coś jeszcze przeoczyłem ?
Go to the top of the page
+Quote Post
wrzasq
post 9.02.2009, 04:08:48
Post #4





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


mysqli_error


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 22.06.2025 - 10:36