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

Notify me of follow-up comments via e-mail (or subscribe here).




 

Share

Subscribe Feed

Email

Facebook

Twitter

Delicious

Digg

StumbleUpon

Google Buzz

Deviantart