PHP MySQL: Penerapan MySQL Stored Procedures
Jurnalcode.com

PHP MySQL: Penerapan MySQL Stored Procedures

PHP MySQL: Penerapan MySQL Stored Procedures


Dalam tutorial ini, Anda akan belajar bagaimana  MySQL Stored Procedures menggunakan PHP PDO. Kami akan menunjukkan cara memanggil Stored Procedures yang mengembalikan hasil dan Stored Procedures yang menerima parameter input / output.

Langkah-langkah memanggil  MySQL Stored Procedures yang mengembalikan hasil yang ditetapkan menggunakan PHP PDO mirip dengan query data dari tabel database MySQL menggunakan statemen SELECT . Alih-alih mengirimkan pernyataan SELECT ke database MySQL, Anda mengirim pernyataan prosedur Stored Procedures.

Pertama, buat Stored Procedures  dan beri nama GetPelanggan() di contoh database untuk demonstrasi.GetPelanggan()   Stored Procedures mengambil name dan credit limit pelanggan dari tabel Pelanggan.

Prosedur GetCustomers() tersimpan berikut Contoh logikanya:

 DELIMITER  $$
 
 CREATE   PROCEDURE  GetCustomers()
 BEGIN 
  SELECT  customerName, creditlimit
  FROM  customers;
END $$

 

Kedua, buat file PHP baru bernama phpmysqlstoredprocedure1.php   dengan kode berikut :

<!DOCTYPE html> 
 <html> 
     <head> 
         <title> PHP MySQL Stored Procedure Demo 1 </title> 
         <link  rel = "stylesheet"   href = "css/table.css"   type = "text/css"  /> 
     </head> 
     <body> 
          <?php 
         require_once   'dbconfig.php' ; 
         try   { 
             $pdo   =   new   PDO ( "mysql:host=$host;dbname=$dbname" ,   $username ,   $password ) ; 
             // execute the stored procedure 
             $sql   =   'CALL GetCustomers()' ; 
             // call the stored procedure 
             $q   =   $pdo -> query ( $sql ) ; 
             $q -> setFetchMode ( PDO:: FETCH_ASSOC ) ; 
         }   catch   ( PDOException   $e )   { 
             die ( "Error occurred:"   .   $e -> getMessage ( ) ) ; 
         } 
         ?> 
         <table> 
             <tr> 
                 <th> Customer Name </th> 
                 <th> Credit Limit </th> 
             </tr> 
              <?php   while   ( $r   =   $q -> fetch ( ) ) :   ?> 
                 <tr> 
                     <td> <?php   echo   $r [ 'customerName' ]   ?> </td> 
                     <td> <?php   echo   '$'   .   number_format ( $r [ 'creditlimit' ] ,   2 )   ?> 
                     </td> 
                 </tr> 
              <?php   endwhile ;   ?> 
         </table> 
     </body> 
 </html> 

 

Hasil

Memanggil Stored Procedures dengan parameter OUT

Agak sulit untuk memanggil Stored Procedures dengan parameter OUT . Kami akan menggunakan Stored Procedures GetCustomerLevel() yang menerima nomor pelanggan sebagai parameter masukan dan mengembalikan tingkat pelanggan berdasarkan batas kredit.

 

DELIMITER  $$
 
 CREATE   PROCEDURE  GetCustomerLevel(
     in   p_customerNumber  int (11), 
     out  p_customerLevel   varchar (10))
 BEGIN 
     DECLARE  creditlim  double ;
 
     SELECT  creditlimit  INTO  creditlim
     FROM  customers
     WHERE  customerNumber = p_customerNumber;
 
     IF  creditlim  >  50000  THEN 
     SET  p_customerLevel =  'PLATINUM' ;
     ELSEIF  (creditlim  < = 50000  AND  creditlim  > = 10000)  THEN 
         SET  p_customerLevel =  'GOLD' ;
     ELSEIF  creditlim  <  10000  THEN 
         SET  p_customerLevel =  'SILVER' ;
     END IF ;
 
 END $$

 

Di MySQL, kita bisa Stored Procedures GetCustomerLevel() tersimpan sebagai berikut:

 

CALL  GetCustomerLevel(103,@level);
 SELECT  @level  AS  level;

 

Di PHP, kita harus meniru pernyataan tersebut:

  • Pertama, kita perlu menjalankan Procedures GetCustomerLevel() Stored.
  • Kedua, untuk mendapatkan tingkat pelanggan, kita perlu query dari variabel @level . Adalah penting bahwa kita harus memanggil metode closeCursor() dari objek PDOStatement untuk mengeksekusi pernyataan SQL berikutnya.

Mari kita lihat bagaimana logika diimplementasikan dalam script PHP berikut ini:

<?php 
 
 require_once   'dbconfig.php' ; 
 
 /** 
  * Get customer level 
  * @param int $customerNumber 
  * @return string 
  */ 
 function   getCustomerLevel ( int   $customerNumber )   { 
     try   { 
         $pdo   =   new   PDO ( "mysql:host=$host;dbname=$dbname" ,   $username ,   $password ) ; 
 
         // calling stored procedure command 
         $sql   =   'CALL GetCustomerLevel(:id,@level)' ; 
 
         // prepare for execution of the stored procedure 
         $stmt   =   $pdo -> prepare ( $sql ) ; 
 
         // pass value to the command 
         $stmt -> bindParam ( ':id' ,   $customerNumber ,   PDO:: PARAM_INT ) ; 
 
         // execute the stored procedure 
         $stmt -> execute ( ) ; 
 
         $stmt -> closeCursor ( ) ; 
 
         // execute the second query to get customer's level 
         $row   =   $pdo -> query ( "SELECT @level AS level" ) -> fetch ( PDO:: FETCH_ASSOC ) ; 
         if   ( $row )   { 
             return   $row   !==   false   ?   $row [ 'level' ]   :   null ; 
         } 
     }   catch   ( PDOException   $e )   { 
         die ( "Error occurred:"   .   $e -> getMessage ( ) ) ; 
     } 
     return   null ; 
 } 
 
 $customerNo   =   103 ; 
 echo   sprintf ( 'Customer #%d is %s' ,   $customerNo ,   getCustomerLevel ( $customerNo ) ) ; 

Jika Anda menguji skrip di browser web, Anda akan melihat tangkapan layar berikut:

 

.

Ayo Komentar