Gần đây tôi đã học cách sử dụng Zend Framework. Tôi đã làm một ứng dụng CRUD đơn giản. Nhưng bây giờ tôi muốn sử dụng một cơ sở dữ liệu hiện có cho một ứng dụng phức tạp hơn và tôi muốn biết cách tôi gọi một thủ tục lưu sẵn trong Model, cách gửi các tham số, cách đọc kết quả và lưu chúng trong một mảng trong PHP. Xin vui lòng. Tôi đánh giá cao mọi sự trợ giúp :)Làm cách nào để sử dụng thủ tục được lưu trữ trong cơ sở dữ liệu MySql với Zend Framework?
Trả lời
Nó không quá khó. Dưới đây là một ví dụ về một thủ tục MySQL lưu trữ với một tham số IN
, một OUT
tham số, và một tập kết quả:
CREATE PROCEDURE MyProc(IN i INTEGER, OUT o INTEGER)
BEGIN
SELECT i+10 INTO o;
SELECT i, o;
END
Bạn có thể gọi đây là phương pháp query()
, và thông qua một tham số:
$stmt = $db->query("CALL MyProc(?, @output)", array(25));
print_r($stmt->fetchAll());
Bí quyết là các procs được lưu trữ của MySQL có thể trả về nhiều tập kết quả (nếu proc có nhiều truy vấn SELECT
chẳng hạn). Vì vậy, API phải tiến hành thông qua tất cả các tập kết quả trước khi bạn có thể thực hiện một truy vấn SQL khác. Hoặc nếu không bạn sẽ gặp lỗi "Lệnh không đồng bộ hóa".
Nếu bạn sử dụng adapter PDO_MySQL:
while ($stmt->nextRowset()) { }
Nếu bạn sử dụng adapter MySQLi, bạn sẽ thấy rằng Zend_Db_Statement_Mysqli
không thực hiện nextRowset()
, vì vậy bạn phải gọi các đối tượng kết nối mysqli nội bộ:
while ($db->getConnection()->next_result()) { }
Khi bạn xóa bộ kết quả, bạn có thể chạy truy vấn SQL tiếp theo, ví dụ để lấy giá trị tham số OUT
của thủ tục:
$stmt = $db->query("SELECT @output");
print_r($stmt->fetchAll());
Tôi chưa thử nghiệm các thủ tục lưu trữ được gọi trong các nhãn hiệu cơ sở dữ liệu khác ngoài MySQL. –
Cảm ơn bạn Bill .. Tôi sẽ thử nó càng sớm càng tốt :) – l2mt
Câu trả lời hay từ Bill. Chỉ để hoàn thành, nếu bạn gặp phải:
SQLSTATE[HY000]: General error: 2053
Khi sử dụng phương pháp này để lấy kết quả từ quy trình, hãy kiểm tra đối số của bạn. Tôi refactored một phương pháp và đã được đi qua NULL như là đối số cho các thủ tục như các biến tôi đã sử dụng được ra khỏi phạm vi. Khi tôi đã sửa lỗi sai lầm ngớ ngẩn này, vấn đề sẽ biến mất (được thay thế bởi một lỗi khác):
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other
unbuffered queries are active. Consider using PDOStatement::fetchAll().
Tôi đang sử dụng $stmt->fetchAll()
. Tôi đã chuyển sang sử dụng prepare()
và execute()
thay cho số query()
. Chuyển sang mysqli
từ pdo_mysql
trong cấu hình Zend_Db của tôi cuối cùng cũng có những thứ có hiệu quả đối với tôi. Tôi tìm thấy thông tin này từ những câu dưới đây SO:
$db = Zend_Db_Table::getDefaultAdapter();
$stmt = $db->query("CALL procedure()");
$data = $stmt->fetchAll();
Chào mừng bạn đến với StackOverflow. Để cung cấp câu trả lời hay, bạn nên viết giải thích với mã bạn đã cung cấp. – filipst
- 1. Zend Framework nhiều cơ sở dữ liệu
- 2. Làm cách nào để thực thi PHP được lưu trữ trong cơ sở dữ liệu MySQL?
- 3. Sử dụng cơ sở dữ liệu bên trong một thủ tục đã lưu
- 4. Gọi thủ tục lưu trữ trong một thủ tục được lưu trữ trong MySQL
- 5. Thủ tục lưu trữ MySQL Quyền
- 6. Máy chủ SQL: cách lấy tên cơ sở dữ liệu làm tham số trong thủ tục được lưu trữ
- 7. Lưu trữ Enums trong Cơ sở dữ liệu MySQL
- 8. Làm thế nào để lưu trữ cảnh báo MySQL trong cơ sở dữ liệu?
- 9. Thủ tục lưu trữ trong phpMyAdmin
- 10. Lưu trữ địa chỉ IP trong cơ sở dữ liệu MySQL bằng cách sử dụng PHP
- 11. MySQL: Làm cách nào để kiểm tra cấu trúc cơ sở dữ liệu của tôi (tính nhất quán khóa ngoại, thủ tục được lưu trữ, v.v.)
- 12. MySQL: Làm thế nào để sửa đổi các thủ tục lưu trữ một cách nguyên tử?
- 13. Mẫu lưu trữ với các thủ tục được lưu trữ
- 14. Kiểm tra thủ tục và lưu trữ thủ tục bằng cách sử dụng Nunit
- 15. Zend_Acl, với vai trò và quyền được lưu trữ trong cơ sở dữ liệu
- 16. nơi MySQL lưu trữ tệp cơ sở dữ liệu?
- 17. Làm cách nào để bạn chỉnh sửa thủ tục được lưu trữ trong MySQL?
- 18. Lấy siêu dữ liệu thủ tục lưu trữ cho một thủ tục trong gói Oracle bằng cách sử dụng ADO.NET
- 19. Thay đổi tên cơ sở dữ liệu và truy vấn cơ sở dữ liệu chéo trong thủ tục được lưu trữ
- 20. cách chuyển các thủ tục được lưu trữ giữa các cơ sở dữ liệu SQL Server 2005
- 21. Làm thế nào để lưu trữ hơn 255 char trong cơ sở dữ liệu MySQL?
- 22. Làm thế nào để lưu trữ Euro Symbol trong cơ sở dữ liệu mysql?
- 23. Chuyển dữ liệu có thể được lưu trữ thành thủ tục được lưu trữ
- 24. Làm thế nào để sử dụng đầu ra Bảng từ lưu trữ MYSQL Thủ tục
- 25. Thay đổi trình xóa thủ tục được lưu trữ
- 26. Sao lưu cơ sở dữ liệu MySQL
- 27. Trong Delphi tôi có nên sử dụng nhiều cơ sở dữ liệu chèn từ bên trong một vòng lặp hoặc sử dụng một thủ tục được lưu trữ?
- 28. Làm thế nào để lưu một thủ tục lưu trữ?
- 29. Cơ sở dữ liệu Magento IP được lưu trữ
- 30. Tôi làm cách nào để tìm các cuộc gọi thủ tục được lưu trữ?
Nếu bạn muốn sử dụng thủ tục lưu trữ trong cơ sở dữ liệu MySQL GoDaddy lưu trữ, kiểm tra xem bạn có thể sao lưu nó lên cùng với sao lưu cơ sở dữ liệu của bạn. Từ kinh nghiệm của tôi, họ KHÔNG cho phép sao lưu các thủ tục được lưu trữ. Nó làm cho tôi không thể chấp nhận để sử dụng chúng. –