Akses Result Set dari Stored Procedure MySQL Lewat PHP

Posted in: Basis Data |

This post is also available in: English

sp_mysql_thumb

This post is also available in: English

Dari kasus yang dikemukakan oleh mahasiswa saya, result-set yang diberikan stored procedure dari MySQL tidak dapat diakses dari PHP sehingga menggunakan Function, well sebetulnya bisa saja. Ada dua cara mengakses result-set yang dikembalikan oleh stored procedure, menggunakan MySQL extension dengan client_flag untuk dukungan multi statement dan multi result atau menggunakan MySQLi extension.

Kasus yang digunakan di bawah menggunakan database dari WordPress.

Stored Procedure yang digunakan:

CREATE PROCEDURE `GetPost`(IN limitCount INTEGER(11))
BEGIN
   set @limitCount=limitCount;
   set @sql="select post_title, display_name from wp_posts p
join wp_users u on p.post_author=u.id
where p.post_type='post' and post_status='publish'
order by post_date desc"; 

   if (not isnull(limitCount)) then
      set @sql=concat(@sql, " limit 0,?");
   end if;

   prepare stmt from @sql; 

   if (isnull(limitCount)) then
      execute stmt;
   else
      execute stmt using @limitCount;
   end if;

   deallocate prepare stmt;
END;
  1. Menggunakan MySQL extensionMySQL Extension pada PHP merupakan extension untuk MySQL 4 walaupun masih dapat digunakan untuk MySQL 5 namun ada keterbatasan. MySQL extension untuk PHP tersedia hanya untuk procedural tidak untuk object-oriented. Untuk mengakses stored procedure diperlukan mengeset client_flags untuk multi statement (nilai=65536) dan multi results (nilai=131072)pada saat koneksi database.Contohnya adalah sebagai berikut (prosedural).
       $sql = "call GetPost(5)"; //query untuk panggil stored procedure
    
       // koneksi mysql, untuk mengakses stored procedure
       // client flags diset untuk multi statement dan multi result
       // 196608 = 65536 + 131072
       $mysql = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD, false, 196608);
       if (!$mysql){
          printf("connect failed: %s\n", mysql_error());
       }
       else
       {
          mysql_select_db(DB_NAME,$mysql);
          $result = mysql_query($sql);
          if ($result) {
             while ($row = mysql_fetch_object($result)) {
                printf("%s : %s ", $row->display_name, $row->post_title);
             }
             mysql_free_result($result); //free result set
          }
       }
       mysql_close($mysql);
  2. Menggunakan MySQLi extensionMySQLi Extension merupakan extension untuk mengakses fungsionalitas MySQL 4.1 ke atas. Extension ini tersedia baik untuk procedural maupun object-oriented. Untuk mengakses stored procedure “tidak diperlukan” untuk mengeset client flags.Contohnya adalah sebagai berikut (object-oriented).
       $sql = "call GetPost(5)";  //query untuk panggil stored procedure
    
       $mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME); //koneksi mysqli
       if (mysqli_connect_errno()){
          printf("connect failed: %s\n", mysqli_connect_error
       }
       else
       {
          if ($result = $mysqli->query($sql)) {
                while ($row = $result->fetch_object()) {
                      printf("%s : %s ", $row->display_name, $row->post_title);
                }
                $result->close(); //free result set
          }
       }
       $mysqli->close();

Contoh screenshotnya:

Contoh tampilan hasil stored procedure MySQL lewat PHP

Contoh tampilan hasil stored procedure MySQL lewat PHP




Speak Up!

Leave your own comment




 

Share

Subscribe Feed

Email

Facebook

Twitter

Delicious

Digg

StumbleUpon

Google Buzz

Deviantart