Làm cách nào để lấy dữ liệu từ thủ tục được lưu trữ trong PHP?
Một thủ tục được lưu trữ là một mã SQL đã chuẩn bị sẵn mà bạn có thể lưu, vì vậy mã này có thể được sử dụng lại nhiều lần Show
Vì vậy, nếu bạn có một truy vấn SQL mà bạn viết đi viết lại nhiều lần, hãy lưu nó dưới dạng một thủ tục được lưu trữ và sau đó chỉ cần gọi nó để thực thi nó Bạn cũng có thể truyền tham số cho thủ tục được lưu trữ để thủ tục được lưu trữ có thể hoạt động dựa trên (các) giá trị tham số được truyền Cú pháp thủ tục lưu trữTẠO THỦ TỤC tên thủ tục Thực hiện một thủ tục lưu trữCơ sở dữ liệu demoDưới đây là một lựa chọn từ bảng "Khách hàng" trong cơ sở dữ liệu mẫu của Northwind CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Đức2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222Mexico D. F. 05021Mexico3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D. F. 05023Mexico4Xung quanh Sừng Thomas Hardy120 Hanover Sq. Luân ĐônWA1 1DPUK5Berglunds snbbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Thụy Điển Ví dụ thủ tục lưu trữCâu lệnh SQL sau đây tạo một thủ tục được lưu trữ để chọn Khách hàng từ một Thành phố cụ thể với Mã bưu chính cụ thể từ bảng "Khách hàng" Nói một cách đơn giản, Thủ tục được lưu trữ ("SP") là một thủ tục (được viết bằng SQL và các câu lệnh điều khiển khác) được lưu trữ trong cơ sở dữ liệu có thể được gọi bởi công cụ cơ sở dữ liệu và các ngôn ngữ lập trình được kết nối Trong hướng dẫn này, chúng ta sẽ xem cách tạo một SP trong MySQL và thực thi nó trong máy chủ MySQL và trong PHP Ghi chú. Chúng tôi sẽ không đề cập đến toàn bộ khía cạnh của SPhere. Tài liệu MySQL chính thức phải luôn là nơi để tham khảo SP cũng có sẵn trong các máy chủ cơ sở dữ liệu phổ biến khác (ví dụ Postgre) vì vậy những gì chúng ta sẽ thảo luận ở đây cũng có thể được áp dụng cho những máy chủ đó Tại sao Thủ tục lưu trữ được khuyến nghịHầu hết chúng ta đều khá quen thuộc với việc thiết lập thông thường để xây dựng một ứng dụng cơ sở dữ liệu. tạo cơ sở dữ liệu, tạo bảng, thiết lập chỉ mục, CRUD dữ liệu, đưa ra truy vấn từ phía máy khách và xử lý thêm nếu cần Quy trình công việc đó hoạt động tốt trong hầu hết các trường hợp nhưng có một khía cạnh quan trọng của lập trình cơ sở dữ liệu bị thiếu. thủ tục lưu trữ Có ít nhất bốn lợi thế tôi có thể nghĩ đến khi sử dụng SP trong ứng dụng cơ sở dữ liệu Thứ nhất, nó làm giảm lưu lượng mạng và chi phí hoạt động. Trong một ứng dụng web cơ sở dữ liệu PHP điển hình, có bốn lớp
Trong một môi trường điển hình, các lớp này rất có thể sẽ không nằm trên một máy duy nhất, thậm chí có thể không nằm trong một mạng đối với các ứng dụng lớn hơn Mặc dù tốc độ mạng đã tăng lên rất nhiều trong vài năm qua, nhưng nó vẫn chậm nhất và không đáng tin cậy nhất so với các cách truyền dữ liệu khác (bộ đệm CPU, bộ nhớ, đĩa cứng, v.v.). Vì vậy, để tiết kiệm băng thông và tăng cường độ mạnh mẽ, đôi khi nên thực hiện nhiều xử lý và logic hơn ở phía máy chủ (cụ thể là máy chủ MySQL) và có ít dữ liệu được truyền qua mạng hơn Thứ hai, nó cải thiện hiệu suất. SP được lưu trữ và chạy trực tiếp trong máy chủ MySQL. Nó có thể được biên dịch trước và phân tích bởi máy chủ cơ sở dữ liệu. Điều này hoàn toàn khác so với việc đưa ra cùng một truy vấn từ phía máy khách, nơi truy vấn sẽ được trình điều khiển cơ sở dữ liệu phân tích cú pháp, được phân tích và tối ưu hóa (nếu có thể) mỗi khi câu lệnh truy vấn được gọi. Điều này bằng cách nào đó khá giống với việc thực thi ngôn ngữ được giải thích (ở cuối máy khách) và thực thi ngôn ngữ được biên dịch (ở cuối máy chủ cơ sở dữ liệu). Và chúng tôi biết một chương trình được biên dịch sẽ chạy nhanh hơn Thứ ba, Viết một lần và Thực thi ở mọi nơi. SQL là tiêu chuẩn và hoàn toàn độc lập với nền tảng 100%. Nó chỉ dựa vào máy chủ cơ sở dữ liệu. Xem xét có bao nhiêu ngôn ngữ/lib khác nhau mà chúng ta có thể sử dụng để xử lý cơ sở dữ liệu. Sẽ tăng hiệu quả khi đặt việc truy xuất và xử lý dữ liệu ở cuối máy chủ thay vì viết cùng một logic xử lý theo một cú pháp khác do tất cả các ngôn ngữ/lib này cung cấp, nếu logic xử lý dữ liệu được sử dụng phổ biến như vậy Cuối cùng nhưng không kém phần quan trọng, SP là một khía cạnh cơ bản của bảo mật cơ sở dữ liệu Hãy xem xét một thiết lập cơ sở dữ liệu đơn giản. Trong một hệ thống thông tin nguồn nhân lực (HRIS), thật hợp lý khi giả định rằng tồn tại một bảng chứa thông tin lương của từng nhân viên. Một nhân viên nhân sự nên có quyền lấy một số số liệu ra khỏi bảng này. tổng lương, lương trung bình, v.v nhưng nhân viên này không nên xem lương chi tiết của từng nhân viên vì thông tin này sẽ quá nhạy cảm và chỉ nên xem cho một số ít Chúng tôi biết MySQL có quyền kiểm soát đặc quyền toàn diện. Trong trường hợp này, rõ ràng là chúng tôi thậm chí không thể cấp đặc quyền 6 cho nhân viên nhân sự này (nếu chúng tôi làm như vậy, có nghĩa là anh ấy/cô ấy có thể xem mức lương chi tiết của mọi người). Nhưng nếu anh ấy/cô ấy không thể truy cập vào bảng 9, thì làm cách nào để nhân viên này có được thông tin tổng hợp liên quan đến 9? Câu trả lời là sử dụng Thủ tục được lưu trữ để trả về thông tin được yêu cầu và cấp cho nhân viên đó đặc quyền 1. (Để có danh sách chi tiết và giải thích về các đặc quyền của MySQL, vui lòng tham khảo tài liệu chính thức. Liên kết ở đây là dành cho MySQL 5. 6. Vui lòng thay thế 5. 6 với phiên bản bạn đang sử dụng. )SP hiện là cầu nối giữa người dùng (nhân viên nhân sự của chúng tôi) và bảng ( 9), mà người dùng không có quyền truy cập trực tiếpĐó là nó. Với SP, chúng tôi có thể yêu cầu người dùng hoàn thành nhiệm vụ mà không ảnh hưởng đến bảo mật cơ sở dữ liệu (và chính sách nhân sự) Hạn chế của việc sử dụng thủ tục lưu trữSau khi đặt tên cho tất cả các ưu điểm của việc sử dụng SP, chúng ta cần hiểu rõ về một số nhược điểm và xem liệu có cách nào để cải thiện hay không.
Tạo thủ tục lưu trữ trong MySQLVì SP được lưu trữ trong máy chủ, nên tạo SP trực tiếp trong máy chủ, tôi. e. , không phải bằng cách sử dụng PHP hoặc các ngôn ngữ lập trình khác để đưa ra các lệnh SQL để làm như vậy Hãy xem cách tạo SP trong máy chủ MySQL, tạo người dùng và áp dụng các đặc quyền và chạy (với tư cách là người dùng đó) SP để xem kết quả có đúng không. Trong môi trường làm việc của tôi, tôi đang sử dụng MySQL Workbench. Các công cụ khác có sẵn (ví dụ: PHPMyAdmin), vì vậy hãy thoải mái sử dụng các công cụ phù hợp nhất với bạn Giả sử chúng ta có một bảng như thế này
Và đối với nhân viên nhân sự cần lấy thông tin tổng hợp về lương (trung bình, tối đa, tối thiểu, v.v.) từ bảng đó, trước tiên chúng tôi tạo một người dùng 5 như thế này
và đối với người dùng này, chúng tôi chỉ cấp đặc quyền 1 cho lược đồ nơi chứa bảng 9
Chúng tôi có thể xác minh đặc quyền cần thiết được cấp bằng cách truy cập "Người dùng và Đặc quyền" trong MySQL Bench Bây giờ hãy tạo SP như thế này
GHI CHÚ. Tất cả các hoạt động trên sẽ yêu cầu vai trò quản trị viên trong máy chủ MySQL Sau khi ban hành lệnh trong MySQL Workbench, 8 SP sẽ được tạo và sẵn sàng để được gọi. Nó sẽ trả về mức lương trung bình của bảng 9Để kiểm tra xem người dùng 0 có thực sự chạy SP nhưng không thể truy cập bảng 9 hay không, chúng ta có thể chuyển đổi vai trò bằng cách đăng nhập vào máy chủ MySQL bằng người dùng 0. Nó có thể được thực hiện bằng cách tạo một kết nối khác trong MySQL Workbench bằng một cặp người dùng/mật khẩu khácSau khi đăng nhập với tên 0, điều đầu tiên chúng tôi nhận thấy là người dùng sẽ không thể nhìn thấy bất kỳ bảng nào và chỉ có thể nhìn thấy SPRõ ràng là người dùng 0 sẽ không thể chọn bất cứ thứ gì từ bất kỳ bảng nào (do đó không thể xem số tiền lương chi tiết của bảng 9) nhưng anh ấy/cô ấy có thể thực hiện SP chúng tôi vừa tạo và nhận được mức lương trung bình 3Mức lương trung bình sẽ được hiển thị Cho đến nay, chúng tôi đã hoàn thành tất cả các bước chuẩn bị để tạo người dùng, cấp đặc quyền, tạo SP và kiểm tra hoạt động của SP. Tiếp theo, chúng tôi sẽ trình bày cách gọi SP đó từ bên trong PHP Gọi thủ tục lưu trữ từ PHPVới PDO, việc gọi một SP rất đơn giản. Mã PHP như sau 4 6 sẽ chứa mức lương trung bình của bảng 9. Người dùng có thể xử lý thêm đầu ra bằng PHP ngay bây giờPhần kết luậnTrong bài viết này, chúng tôi đã xem xét thành phần bị lãng quên từ lâu trong cơ sở dữ liệu MySQL. thủ tục lưu trữ. Những lợi thế khi sử dụng SP là rõ ràng và hãy để tôi nhấn mạnh lại. Thủ tục được lưu trữ cho phép chúng tôi áp dụng kiểm soát truy cập cơ sở dữ liệu mạnh mẽ hơn đối với một số dữ liệu nhất định để phù hợp với yêu cầu kinh doanh Chúng tôi cũng minh họa các bước cơ bản để tạo Thủ tục được lưu trữ, tạo người dùng và gán đặc quyền cũng như cách gọi nó trong PHP Bài viết này không đề cập đến toàn bộ phạm vi của Thủ tục lưu trữ. Một số khía cạnh quan trọng như tham số đầu vào/đầu ra, câu lệnh điều khiển, con trỏ, cú pháp đầy đủ, v.v. không được thảo luận trong bài viết ngắn này Nếu bạn cảm thấy hứng thú, vui lòng để lại nhận xét của bạn tại đây và chúng tôi sẽ rất vui khi mang đến những bài viết chuyên sâu hơn về khía cạnh hữu ích và mạnh mẽ này của MySQL Chia sẻ bài viết nàyTaylor Ren Taylor là một nhà phát triển ứng dụng web và máy tính để bàn tự do sống ở Tô Châu, miền Đông Trung Quốc. Bắt đầu từ series công cụ phát triển Borland (C++Builder, Delphi), xuất bản sách trên InterBase, được chứng nhận Borland Expert năm 2003, anh chuyển sang phát triển web với cấu hình LAMP điển hình. Sau đó, anh ấy bắt đầu làm việc với jQuery, Symfony, Bootstrap, Dart, v.v. Làm cách nào chúng ta có thể truy xuất dữ liệu từ thủ tục được lưu trữ?Máy chủ SQL chọn từ thủ tục được lưu trữ có tham số . Đầu tiên, tạo một thủ tục được lưu trữ sử dụng nhiều tham số để thực thi một số tác vụ và trả về kết quả Tiếp theo, lưu trữ kết quả được trả về bởi một thủ tục được lưu trữ trong một biến bảng Cuối cùng, sử dụng câu lệnh SELECT để lấy một số dữ liệu từ biến bảng Làm cách nào để gọi một thủ tục được lưu trữ trong PHP?Để gọi thủ tục lưu sẵn từ ứng dụng PHP, bạn chuẩn bị và thực thi câu lệnh SQL CALL . Thủ tục mà bạn gọi có thể bao gồm tham số đầu vào (IN), tham số đầu ra (OUT) và tham số đầu vào và đầu ra (INOUT).
Làm cách nào tôi có thể tìm nạp dữ liệu từ cơ sở dữ liệu trong PHP?Có hai cách để kết nối với cơ sở dữ liệu bằng PHP. . Hướng đối tượng MySQLi $conn->query($query); MySQLi Thủ tục mysqli_query($conn, $query) PDO. $stmt = $conn->prepare($query); Làm cách nào để sử dụng SP 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 |