Làm cách nào tôi có thể gọi thủ tục được lưu trữ trong php?

Gọi một thủ tục được lưu trữ trong mysqli là một công việc khó khăn. Có những lỗi và hạn chế cần tránh cũng như nhiều thủ thuật để sử dụng

Thành thật mà nói, trong trường hợp đơn giản nhất có thể [khi thủ tục được lưu trữ là truy vấn sql duy nhất mà mã của bạn phải chạy và bản thân thủ tục tương đối đơn giản, không sử dụng con trỏ hoặc trả về nhiều tập kết quả], bạn có thể gọi nó là

Nhưng thủ tục được lưu trữ của bạn càng phức tạp thì mã gọi càng phức tạp.

Có một điều về thủ tục lưu sẵn mà bất kỳ lập trình viên nào cũng vấp phải lúc đầu. mọi thủ tục được lưu trữ luôn trả về một tập hợp kết quả bổ sung. một [hoặc nhiều] kết quả có dữ liệu thực và một kết quả trống. Điều đó có nghĩa là nếu bạn cố gắng gọi một thủ tục và sau đó tiếp tục với một truy vấn khác, thì lỗi "Không thể thực hiện các truy vấn trong khi các truy vấn không có bộ đệm khác đang hoạt động" sẽ xảy ra, bởi vì trước tiên bạn phải xóa kết quả trống thừa đó

Do đó, để tiếp tục, trước tiên chúng ta phải loại bỏ tập kết quả bổ sung đó từ mysql. Và mysqli. next_result thực hiện chính xác điều đó. Vì vậy, về cơ bản, chúng ta chỉ cần gọi hàm này để các truy vấn SQL tiếp theo của chúng ta hoạt động

Ngoài ra, chúng ta sẽ cần chức năng này

Gọi một thủ tục được lưu trữ không có tham số trả về một tập kết quả duy nhất

Như đã nói ở trên, trong trường hợp quy trình của bạn là tương tác cơ sở dữ liệu duy nhất trên trang, bạn có thể gọi nó ngay lập tức mà không cần thêm bất kỳ nội dung nào. Nhưng thường thì không phải như vậy và bạn phải thực hiện các truy vấn khác sau thủ tục. Do đó, chúng tôi phải loại bỏ tập hợp kết quả bổ sung đó theo cách của chúng tôi

Khi truy vấn của chúng tôi không nhận bất kỳ tham số nào và chỉ trả về một tập kết quả, chúng tôi có thể thêm một lệnh gọi duy nhất vào mysqli. next_result

Để thực thi một câu lệnh trong cơ sở dữ liệu MySQL, bạn có thể sử dụng bất kỳ công cụ máy khách MySQL nào. g. , công cụ máy khách mysql hoặc MySQL Workbench

Đầu tiên, chèn dữ liệu vào bảng

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
1 bằng cách thực hiện câu lệnh

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
2 sau

INSERT INTO books[title, isbn, published_date,publisher_id] VALUES ['Goodbye to All That','9781541619883','2013-01-05', 3], ['The Mercies','9780316529235','2020-01-28', 3], ['On the Farm','9780763655914','2012-03-27', 2], ['Joseph Had a Little Overcoat','9780140563580','1977-03-15', 2];

Code language: SQL [Structured Query Language] [sql]

Lưu ý rằng bảng

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
3 phải có các hàng có id 2 và 3. Nếu không, bạn có thể chạy tập lệnh chèn các hàng vào bảng

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
3

Thứ hai, thực hiện câu lệnh

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
5 sau để tạo một thủ tục lưu trữ mới có tên là

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
6

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]

Thủ tục được lưu trữ

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
6 trả về tất cả sách được xuất bản sau một năm cụ thể

Thứ ba, thực hiện thủ tục lưu sẵn để kiểm tra tập kết quả

CALL get_books_published_after[2010];

Code language: SQL [Structured Query Language] [sql]

Câu lệnh trả về tập kết quả sau

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
0

Gọi thủ tục lưu trữ MySQL từ PHP bằng PDO

Đoạn script sau minh họa cách gọi thủ tục lưu sẵn

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
6

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
2

Làm thế nào nó hoạt động

Đầu tiên, tạo một kết nối mới đến cơ sở dữ liệu MySQL

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
3

Thứ hai, xây dựng một câu lệnh SQL gọi thủ tục lưu sẵn

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
6

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
5

Câu lệnh chấp nhận một trình giữ chỗ có tên là

CALL get_books_published_after[2010];

Code language: SQL [Structured Query Language] [sql]
0 để bạn có thể liên kết một giá trị với nó sau này

Thứ ba, tạo một câu lệnh đã chuẩn bị bằng cách gọi phương thức

CALL get_books_published_after[2010];

Code language: SQL [Structured Query Language] [sql]
1 của phiên bản PDO

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
8

Thứ tư, liên kết một giá trị với câu lệnh

USE `bookdb`; DELIMITER $$ USE `bookdb`$$ CREATE PROCEDURE `get_books_published_after` [IN published_year INT] BEGIN SELECT book_id, title, isbn, published_date, name as publisher FROM books b INNER JOIN publishers p ON p.publisher_id = b.publisher_id WHERE year[published_date] > published_year; END$$ DELIMITER ;

Code language: SQL [Structured Query Language] [sql]
9

Thứ năm, thực hiện lời gọi thủ tục lưu trữ

INSERT INTO books[title, isbn, published_date,publisher_id] VALUES ['Goodbye to All That','9781541619883','2013-01-05', 3], ['The Mercies','9780316529235','2020-01-28', 3], ['On the Farm','9780763655914','2012-03-27', 2], ['Joseph Had a Little Overcoat','9780140563580','1977-03-15', 2];

Code language: SQL [Structured Query Language] [sql]
0

Vì thủ tục lưu sẵn trả về một tập kết quả, nên bạn có thể tìm nạp từng hàng trong tập kết quả vào một mảng kết hợp bằng phương thức

CALL get_books_published_after[2010];

Code language: SQL [Structured Query Language] [sql]
2

Làm cách nào để lấy dữ liệu từ thủ tục được lưu trữ trong PHP?

Cách gọi thủ tục được lưu trữ từ PHP trong MySQL .
Nhấp chuột phải vào trang PHP bạn muốn sử dụng để gọi thủ tục được lưu trữ và chọn "Mở bằng. " Nhấp vào trình soạn thảo PHP để mở mã
Thêm kết nối PHP vào cơ sở dữ liệu MySQL. .
Chọn tên cơ sở dữ liệu. .
Gọi thủ tục được lưu trữ để truy xuất các bản ghi MySQL

Làm cách nào để gọi thủ tục được lưu trữ trong PHP PDO?

Quy trình .
Đặt tham số thứ ba, data_type , thành một trong các PDO. PARAM_* hằng số chỉ định loại dữ liệu bị ràng buộc. PDO. PARAM_NULL. Đại diện cho kiểu dữ liệu SQL NULL. PDO. PARAM_INT. Đại diện cho các kiểu số nguyên SQL. .
Đặt tham số thứ tư, độ dài, thành độ dài dự kiến ​​tối đa của giá trị đầu ra

Làm cách nào để gọi một hàm SQL trong PHP?

Để chạy thủ tục lưu sẵn trong ứng dụng MySQL và PHP, bạn cần sử dụng 'Gọi câu lệnh SQL' như hình bên dưới. $a = mysql_query['gọi StoredProc[]'];

Làm cách nào để gọi một thủ tục được lưu trữ trong Oracle PHP?

Gọi Stored Procedure từ PHP . Tên,. thông điệp]; . $sql = 'BEGIN sayHello[:name, :message]; END;'; ?> You then bind the parameters to PHP variables with calls to oci_bind_by_name[] .

Chủ Đề