Salah satu kelebihan PHP 5 adalah interface untuk OOP. Cara koneksi ke database MySQL pun dapat pula dilakukan dengan gaya pemrograman berorientasi obyek. Berikut ini adalah contoh interaksi antara PHP dengan MySQL melalui metode Object-Oriented interface :
$db = new mysqli('192.168.0.192', 'root', '');
$db->select_db('dbtesting');
$sql = "SELECT id, nama FROM tblorangkeren";
$dset = $db->query($sql); /*simpan hasil query ke dataset $dset*/
while ($rs = $dset->fetch_row()) /*retreive recordset ke $rs*/
{
echo "ID: $rs[0] Nama: $rs[1]
";
}
echo "
Jumlah record : " . $dset->num_rows;
$dset->close();
Untuk mengeksekusi stored procedures pada MySQL 5, hanya methods dalam mysqli yang bisa melakukannya. Stored procedure tidak akan dapat di-retreive dengan menggunakan PHP class library mysql klasik. Berikut ini akan dijelaskan mengenai cara memanggil stored procedure dalam berbagai kondisi :
1. Memanggil stored procedure yang tidak mengembalikan record
$sql = "CALL spInsertBuku(@IDBuku, 'PHP5', 'Qvezst', 'Elexmedia')";
$ok = $db->real_query($sql);
2. Memanggil stored procedure yang mengembalikan record (satu perintah SELECT)
$sql = "CALL spGetDataBuku()";
$dset = $db->query($sql); /*simpan hasil query ke dataset $dset*/
3. Memanggil stored procedure yang mengembalikan beberapa record dari beberapa perintah SELECT
$sql = "CALL spGetDataBukuTrusGetDataAnggota()";
$ok = $db->multi_query($sql);
if($ok) {
$i = 1;
do {
echo "Hasil Query : " . $i;
$dset = $db->store_result();
if($dset->num_rows>0 && $dset->field_count>0)
{
while($rs = $dset->fetch_row())
{
echo $rs[0] . " | " . $rs[1] . "
" ;
}
}
$i = $i + 1;
} while ($db->next_result());
}
$dset->close();
4. Membuat stored procedure
Khusus untuk jenis interaksi ini, method yang dapat dipergunakan hanyalah real_query(), dengan pengeksekusian untuk setiap baris SQL secara terpisah. Berikut ini adalah contohnya :
$sql = "DROP PROCEDURE IF EXISTS spBlablabla";
$ok = $db->real_query($sql);
$sql = "DELIMITER |";
$ok = $db->real_query($sql);
$sql = "CREATE PROCEDURE spBlablabla (OUT abc integer)
BEGIN
DECLARE nama VARCHAR(150);
…
END
| ";
$ok = $db->real_query($sql);
$sql = "DELIMITER ;";
$ok = $db->real_query($sql);
Pernyataan multi_query tidak dapat dipergunakan untuk pengiriman query DDL seperti pembuatan stored procedure ini. Hal ini dikarenakan arsitektur method multi_query sebenarnya melakukan split query string ke dalam array dengan delimiter ; (semicolon) sebagai penanda pemisahnya dan mengirimkan array berisi perintah-perintah SQL tersebut satu per satu ke DBMS. Dalam stored procedure, semicolon dipergunakan sebagai pemisah baris dalam body stored procedure. Jika mempergunakan multi_query, maka stored procedure tersebut tidak akan pernah dieksekusi secara utuh dan akan selalu gagal.
Makasih buat sharenya, ditunggu artikel yang bahas PHP berikutnya.
BalasHapusSalam,
wah bagus sekali ni,saya pun tengah mengkaji dan mempelajari benda ni semua terus menyambung informasi ya! bookmark blog kamu
BalasHapus$sql = "DROP PROCEDURE IF EXISTS spBlablabla";
BalasHapus$ok = $db->real_query($sql);
$sql = "DELIMITER |";
$ok = $db->real_query($sql);
$sql = "CREATE PROCEDURE spBlablabla (OUT abc integer)
BEGIN
DECLARE nama VARCHAR(150);
…
END
| ";
$ok = $db->real_query($sql);
$sql = "DELIMITER ;";
$ok = $db->real_query($sql);
Hi.. thx buat infonya..
saya ingin bertanya.. code diatas mengapa tidak dapat berjalan.. seperti nya fungsi real_query() tidak dapat terbaca.. ini code saya :
------------------------------------
$conn = mysqli_connect("localhost","root","","store_procedure") or die("Database not connected");
$sql = "DROP PROCEDURE IF EXISTS spBlablabla";
$ok = $db->real_query($sql);
$sql = "DELIMITER |";
$ok = $db->real_query($sql);
$sql = "CREATE PROCEDURE spBlablabla (OUT abc integer)
BEGIN
DECLARE nama VARCHAR(150);
…
END
| ";
$ok = $db->real_query($sql);
$sql = "DELIMITER ;";
$ok = $db->real_query($sql);
------------------------------------
Error yg saya dapatkan seperti ini :
Fatal error: Call to a member function real_query() on a non-object in C:\wamp\www\total_football\install\create_stored_procedure.php on line 5
untuk laling :
BalasHapusterima kasih banyak udah mengunjungi situs saya. awak dari negri jiran ya? hehehe...
untuk johan,
kalo kulihat coding mu, yang 'kelolosan' ada baris pertama code mu:
$conn = mysqli_connect("localhost","root","","store_procedure") or die("Database not connected");
variabel yang kmu pake $conn kan? ya bener lah php akan raise error ngga bs jalanin $db->real_query() soalnya object $db lom kmu buat.. hehehe... coba deh ganti jd $conn->real_query()
buat mas johan -
BalasHapusganti baris $conn = mysqli_connect(...
dengan $db = new mysqli(...
function getLanguages()
BalasHapus{
$this->db->select('lang_code, lang_name');
$this->db->from('languages');
$langQuery = $this->db->get();
$languages = array();
if ($langQuery->num_rows() > 0)
{
foreach ($langQuery->result_array() as $langRow)
{
$languages[] = $langRow;
}
}
return $languages;
}
}
Saya dapat pesan error :
Fatal error: Call to a member function num_rows() on a non-object in /home/sloki/user/interpol/sites/aa.poconggaul.com/www/application/models/applicationmodel.php on line 89
Mohon Pencerahan mas...
mungkin $this->db-> harus diganti,
BalasHapusdengan $this->$db->