Doctrine DBAL merupakan library PHP untuk koneksi ke database dengan cara kerja API yang mirip dengan API dari PDO. Kelebihan Doctrine DBAL daripada memakai PHP PDO class secara langsung yaitu adanya abstraksi kode PHP terhadap berbagai macam driver PDO sehingga kode PHP yang kita tulis akan lebih portable, memungkinkan untuk penggunaan custom driver database dan beberapa fitur tambahan.
Untuk menginstal library Doctrine DBAL, cara paling mudah adalah dengan menggunakan tool pear.
Update Channel Pear
$ sudo pear channel-discover pear.doctrine-project.org |
Install Doctrine Common
$ sudo pear install doctrine/DoctrineCommon |
Untuk mengetahui letak folder instalasi bisa diketahui dengan perintah berikut
$ pear list-files doctrine/DoctrineCommon |
Install Doctrine DBAL
$ pear install doctrine/DoctrineDBAL |
Kemudian cek instalasi dengan perintah berikut
$ pear list-files doctrine/DoctrineDBAL |
Dalam OS Fedora 16 yang saya pakai default instal untuk PHP pear berada dalam folder “/usr/share/pear”.
Install Database Employees
Untuk contoh database penulis menggunakan database Employees yang bisa didownload di Launchpad. Untuk instalasinya bisa dilihat online di sini atau pada file README.
Koneksi ke database MySQL dengan PHP
Berikut merupakan class PHP sederhana yang fungsi utamanya membuat koneksi ke database MySQL dengan menggunakan Doctrine DBAL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <?php /** * dbalmysql.php * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * * License under GPL * <http://www.junwatu.com> * Author By Equan Pr. */ use Doctrine\Common\ClassLoader; use Doctrine\DBAL\Configuration; use Doctrine\DBAL\DriverManager; require '/usr/share/pear/Doctrine/Common/ClassLoader.php'; class Dbalmysql { protected $conn; /** * @param $dbname * @param $user * @param $password */ public function __construct($dbname, $user, $password) { /** * Sesuaikan letak library Doctrine DBAL disini */ $classLoader = new ClassLoader("Doctrine", "/usr/share/pear"); $classLoader->register(); $config = new Configuration(); $connectionParams = array( 'dbname' => $dbname, 'user' => $user, 'password' => $password, 'driver' => 'pdo_mysql' ); $conn = DriverManager::getConnection($connectionParams, $config); $this->conn = $conn; } private function setConn($conn){ $this->conn = $conn; } /** * @return Doctrine\DBAL\Doctrine\DBAL\Connection */ public function getConn(){ return $this->conn; } } ?> |
Jika penginstalan Doctrine DBAL dilakukan secara manual (tidak menggunakan pear) pastikan letak library Doctrine DBAL disesuaikan di parameter kedua dari ClassLoader pada baris 45 diatas (sesuaikan “/usr/share/pear”). Untuk contoh pemakaian class dbalmysql.php diatas bisa dilihat pada list kode dibawah ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <?php /** * index.php * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * License under GPL * <http://www.junwatu.com> * Author By Equan Pr. * */ require 'dbalmysql.php'; /* * Sesuaikan setting database disini */ $db_name ="employees"; $db_user ="root"; $db_pass ="your_password"; $dbal_mysql = new Dbalmysql($db_name, $db_user, $db_pass); $conn = $dbal_mysql->getConn(); /** * Query statement */ $sql = "SELECT * FROM employees LIMIT 10"; try { /** * Ambil data dari database */ $stmt = $conn->query($sql); while ($row = $stmt->fetch()) { echo $row['first_name'] . "\n"; } /** * Kalo ada error maka pesan error akan ditampilkan */ } catch (PDOException $ex) { echo "Error: " . $ex->getMessage(); } ?> |
Untuk pengetesan jalankan perintah berikut pada command shell
$ php index.php |
atau letakkan file-file diatas index.php dan dbalmysql.php di webserver yang support PHP 5.3 keatas dan buka file index.php melalui browser.