Niedawno nauczyłem się korzystać z Zend Framework. Zrobiłem prostą aplikację CRUD. Ale teraz chcę użyć istniejącej bazy danych dla bardziej złożonej aplikacji i chcę wiedzieć, jak wywołać procedurę przechowywaną w Modelu, jak przesłać parametry, jak odczytać wyniki i zapisać je w tablicy w PHP. Proszę. Doceniam wszelką pomoc :)Jak mogę użyć procedury przechowywanej w bazie danych MySql z Zend Framework?
Odpowiedz
To nie jest trudne. Oto przykład procedury przechowywanej MySQL z parametrem IN
, parametr OUT
oraz zestaw wyników:
CREATE PROCEDURE MyProc(IN i INTEGER, OUT o INTEGER)
BEGIN
SELECT i+10 INTO o;
SELECT i, o;
END
Można nazwać to metodą query()
i przekazać parametr:
$stmt = $db->query("CALL MyProc(?, @output)", array(25));
print_r($stmt->fetchAll());
Sztuczka polega na tym, że procenty przechowywane w MySQL mogą zwracać wiele zestawów wyników (jeśli proc miał na przykład wiele zapytań SELECT
). Dlatego API musi przejść przez wszystkie zestawy wyników, zanim będzie można wykonać inne zapytanie SQL. Lub otrzymasz komunikat "Polecenia niezsynchronizowane".
W przypadku korzystania z zasilacza pdo_mysql:
while ($stmt->nextRowset()) { }
W przypadku korzystania z zasilacza MySQLi, przekonasz się, że Zend_Db_Statement_Mysqli
nie implementuje nextRowset()
, więc trzeba zadzwonić wewnętrzne mysqli obiekt połączenia:
while ($db->getConnection()->next_result()) { }
po wyczyścić zestawów wyników, można uruchomić kolejnych zapytań SQL, na przykład, aby pobrać wartość parametru OUT
procedura jest:
$stmt = $db->query("SELECT @output");
print_r($stmt->fetchAll());
Nie testowałem wywoływania procedur przechowywanych w bazach danych innych marek oprócz MySQL. –
Dziękuję Bill .. Spróbuję go jak najszybciej :) – l2mt
Świetna odpowiedź od Billa. Tylko dla kompletności, jeśli napotkasz:
SQLSTATE[HY000]: General error: 2053
Podczas korzystania z tej metody, aby uzyskać zestaw wyników z procedury, sprawdź swoje argumenty. Refaktoryzowałem metodę i przekazywałem NULL jako argumenty do procedury, ponieważ zmienne, których użyłem, były poza zakresem. Raz ja ustalona ten głupi błąd problem odszedł (zastępuje go inny):
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other
unbuffered queries are active. Consider using PDOStatement::fetchAll().
Używam $stmt->fetchAll()
chociaż. Przełączyłem na używanie prepare()
i execute()
zamiast query()
. Przejście na mysqli
z pdo_mysql
w mojej konfiguracji Zend_Db w końcu sprawiło, że rzeczy działały dla mnie. Znalazłem tę informację z następującym SO pytanie:
$db = Zend_Db_Table::getDefaultAdapter();
$stmt = $db->query("CALL procedure()");
$data = $stmt->fetchAll();
Witamy w StackOverflow. Aby uzyskać dobrą odpowiedź, należy napisać wyjaśnienie za pomocą podanego kodu. – filipst
- 1. Używanie bazy danych wewnątrz procedury przechowywanej
- 2. Aktualizacja procedury przechowywanej w wielu bazach danych
- 3. Jak ukryć wyjście procedury przechowywanej mysql?
- 4. Połączenie MySql SSL z Zend-Framework
- 5. Wiosna danych JPA procedury przechowywanej
- 6. Parsować wszystkie procedury przechowywane w bazie danych
- 7. Zestaw danych SSRS nie odświeżono po zmianie procedury przechowywanej MySQL
- 8. Drukowanie informacji debugowania z procedury przechowywanej w MySQL
- 9. pobieranie wielu zestawów wyników z procedury przechowywanej mysql w szynach
- 10. Błąd procedury przechowywanej mysql: brak średnika
- 11. skalarne wartości z procedury przechowywanej przez Entity Framework
- 12. wstawić do procedury przechowywanej z parametrami MySQL nie działa
- 13. Jak mogę przekazać "tablicę" wartości do mojej procedury przechowywanej?
- 14. Nie można wykonać procedury przechowywanej MySQL z Java
- 15. Zliczanie wyników procedury przechowywanej
- 16. Co robię źle w tej przechowywanej procedury MySQL?
- 17. Pobieranie danych z procedury składowanej za pomocą Entity Framework
- 18. Jak uzyskać datatable w wyniku procedury przechowywanej
- 19. Jak wyłączyć wyniki procedury przechowywanej z procedury składowanej?
- 20. Wywołanie zdefiniowanej przez użytkownika procedury przechowywanej z instrukcji select mysql
- 21. Wywołanie procedury przechowywanej python
- 22. Jak mogę uruchomić plik tekstowy SQL w bazie danych MySQL?
- 23. Wywołanie procedury przechowywanej w Toad
- 24. Zend Framework 2 - połączenie z bazą danych
- 25. Jak przechowywać ostrzeżenia MySQL w bazie danych?
- 26. MySQL typ danych w bazie
- 27. Jak rzut SQLException w procedury przechowywanej
- 28. Jak korzystać z procedury przechowywanej w log4net ADONetAppender?
- 29. Bardzo trudny wywiad SQL (nie można użyć procedury przechowywanej)
- 30. Grupa Zend framework by
Jeśli chcesz korzystać z procedur przechowywanych w ciągu GoDaddy hosting bazy danych MySQL, należy sprawdzić, czy można jego kopię zapasową wraz z kopii zapasowej bazy danych. Z mojego doświadczenia NIE pozwalają na tworzenie kopii zapasowych zapisanych procedur. Niedopuszczalne jest używanie ich. –