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.