- Hikaru {Aka} Yuuki のブログ - http://www.hikaruyuuki.com -
Akses Result Set dari Stored Procedure MySQL Lewat PHP
Posted By Adikara Putra (Hikaru Yuuki) On 15日 12月 2010年 @ 15:59 In Basis Data | No Comments
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;
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: %sn", 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);
$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: %sn", 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:
Article printed from Hikaru {Aka} Yuuki のブログ: http://www.hikaruyuuki.com
URL to article: http://www.hikaruyuuki.com/blog/akses-result-set-dari-stored-procedure-mysql-lewat-php.html
URLs in this post:
[1] Your Ad Here: http://www.adbrite.com/mb/commerce/purchase_form.php?opid=1784967&afsid=1
[2] Image: http://www.hikaruyuuki.com/blog/akses-result-set-dari-stored-procedure-mysql-lewat-php.html/sp_mysql
[3] Ubah Manual Driver Letter dari Mounted Device (Partisi, Media, dll) Lewat Registry Windows: http://www.hikaruyuuki.com/blog/ubah-manual-driver-letter-dari-mounted-device-partisi-media-dll-lewat-registry-windows.html
[4] Cek dan Import Email Lain Lewat GMail: http://www.hikaruyuuki.com/blog/check-dan-import-email-lain-lewat-gmail.html
[5] PAMP (Personal Apache PHP MySQL) for Symbian s60 3rd Edition: http://www.hikaruyuuki.com/blog/pamp-personal-apache-php-mysql-for-symbian-s60-3rd-edition.html
[6] Ambil Status (User Timeline) dari Twitter: http://www.hikaruyuuki.com/blog/ambil-status-user-timeline-dari-twitter.html
Click here to print.
Copyright © 2011 Hikaru {Aka} Yuuki のブログ. All rights reserved.