Mengenal MySQL Prepared Statement

Pada php versi jadul, untuk menghubungi MySQL kita dapat menggunakan mysql_query. Penggunaan mysql_query rentan dengan SQL injection, untuk mencegahnya kita menggunakan mysql_real_escape_string. Berikut ini ontoh pemrograman mysql_query untuk memasukkan data komentar ke database.

$nama = mysql_real_escape_string($_POST['nama']);
$komentar = mysql_real_escape_string($_POST['komentar']);
$q = mysql_query("INSERT INTO komentar (nama,komentar) VALUES ("$nama", "$komentar")");

Pada query di atas, jika komentar berisi karakter petik atau kutip, begitu diambil lagi akan menampilkan petik atau kutip itu dengan menggunakan backslash (\), misal kata jum'at akan ditampilkan menjadi jum\'at.

Pada php versi baru (5 ke atas), kita sebaiknya menggunakan MySQL prepare statement. Prepared statement memberikan pengamanan dari injeksi dan string. Prepared statement digunakan untuk mengeksekusi statement query yang sama atau mirip berulang-ulang dengan efisiensi tinggi. Dengan fitur ini, kita cukup mengirimkan query sebanyak satu kali kemudian kita dapat mengeksekusinya dengan hanya mengirim parameter-parameternya saja sehingga waktu eksekusi lebih cepat. Contoh penggunaan prepared statement dari php.net:


PHP Mahir, Mahirin skill PHP lo!

Instalasi NoSQL Redis di Ubuntu



Redis adalah salah satu database NoSQL yang cukup mumpuni. Website resmi redis dapat diakses di http://redis.io. Bagi Anda yang belum pernah mencoba redis, silakan coba tutorial interaktifnya di http://try.redis.io/. Kali ini saya menggunakan ubuntu 10.04 untuk melakukan instalasi redis. Saya tidak menginstall dari apt-get, tapi download filenya langsung dari redis.io. Instalasinya mudah, pertama tentukan dulu mau disimpen dimana file redis-nya. Cara instalasi terdapat di http://redis.io/download, tapi saya copas aja deh ke sini.
Buka terminal, masuk ke folder tempat download redis yang diinginkan. Ketik perintah berikut:
$ wget http://redis.googlecode.com/files/redis-2.6.11.tar.gz
$ tar xzf redis-2.6.11.tar.gz
$ cd redis-2.6.11
$ make
Setelah itu untuk menjalankan redis dapat mengeksekusi file berikut:
$ src/redis-server
Biarkan console redis-server tetap berjalan. Untuk menjalankan redis cli, buka terminal baru, kemudian eksekusi file berikut:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
Selanjutnya untuk menggunakan redis di php, mari kita gunakan library predis. Download zip library php di https://github.com/nrk/predis. Setelah itu lakukan ekstraksi terhadap file zip. Setelah diekstrak, ganti nama foldernya menjadi predis supaya mudah digunakan, setelah itu php redis siap digunakan.
Library redis yang tadi didownload memiliki banyak file dan folder, kadang memusingkan juga. Untuk menyederhanakannya, kita dapat membuat single file, caranya buka folder predis/bin dari terminal, kemudian jalankan perintah berikut:
php create-single-file.php
Setelah itu akan terbentuk satu file bernama ‘Predis.php’ di folder bin. Berikut contoh penggunaan predis:
require 'Predis.php';
$single_server = array(
    'host'    => '127.0.0.1',
    'port'    => 6379,
    'database'=> 0
);
$redis = new Predis\Client($single_server);
$redis->set('a', 'Hello world');
echo $redis->get('a');
Demikian contoh penggunaan redis dari saya, lain kali akan saya lanjutkan dengan artikel yang lebih menarik. (Arief Hidayatulloh)

PHP Mahir, Mahirin skill PHP lo!

Install Apache dan PHP di Ubuntu


Untuk instalasi Apache dan PHP di ubuntu, ketik perintah-perintah di bawah ini:
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install php5-cli
sudo apt-get install libapache2-mod-php5
sudo /etc/init.d/apache2 restart
(Arief Hidayatulloh)

PHP Mahir, Mahirin skill PHP lo!


Membuat Virtual Host Apache untuk Domain Sendiri di Ubuntu


Mungkin pembaca sudah tahu maksudnya virtual host, jadi misalkan ada arief.com itu nanti ngarah ke var/www/arief atau ke ~/arief, jadi kalo kita ngetik arief.com di browser, yang jalan tu file di ~/arief, begitu. Langkah pertama adalah ngedit file hosts linux:
sudo gedit /etc/hosts
Selanjutnya tambahin settingan berikut di filenya:
127.0.0.1 arief.com
Contoh file hosts yang sudah diedit di komputer saya:
127.0.0.1 localhost
127.0.1.1 ariefsam-desktop
127.0.0.1 arief.com

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts


Saya membuat folder arief.com di folder /home/ariefsam lalu menambahkan file index.php yang berisi teks apa saja. Selanjutnya mari kita setting virtual host apache-nya. File yang diedit adalah  /etc/apache2/sites-available/default
Sekarang mari kita restart networking ubuntu dan service apache.
sudo /etc/init.d/networking restart
Restart juga apachenya:
/etc/init.d/apache2 restart
Sekarang begitu akses arief.com/index.php, di komputer saya bertuliskan “arief.com berhasil”.  (Arief Hidayatulloh)

PHP Mahir, Mahirin skill PHP lo!

Install Server Message Queue RabbitMQ di Ubuntu 12.04


Sebagai programmer php yang mencoba jadi mahir, kita harus belajar dan terus belajar untuk mencapai mimpi. Selain dengan belajar, untuk mencapai mimpi kita harus tidur. Seseorang yang akan melakukan aktivitas tidur biasanya melakukan rangkaian aktivitas lain seperti cuci muka, sikat gigi dan ganti baju. Coba bayangkan kita menjadi pengasuh panti asuhan. Ketika mendekati jam tidur, kita dan pengasuh lain harus melakukan rangkaian aktivitas mencuci muka anak, membantu sikat gigi dan ganti baju. Misal kita mengawasi dan membantu seorang anak untuk tidur, kita harus menunggui dia cuci muka, kemudian menunggui ketika dia sikat gigi, kemudian menunggui ketika sang anak ganti baju. Untuk menunggui satu anak bisa dibutuhkan waktu 15 menit, gimana kalo banyak anak? Di situlah message queuing diperlukan, setiap pengasuh punya tugas masing-masing, ada yang menunggui cuci muka, sikat gigi, dan ganti baju.
Cukup tentang aktivitas tidurnya, sekarang kita implementasikan kisah tadi ke aplikasi php. Misal ada satu user yang upload gambar, kemudian gambar itu harus di-crop, kemudian datanya dimasukkan ke database. Dari ketiga proses itu, proses crop memakan waktu cukup lama sehingga user harus menunggu proses crop (disusul insert ke database) selesai untuk mendapatkan notifikasi bahwa gambarnya telah di-upload. Karena prosesnya lama, ada kemungkinan terjadi timeout. Ketika terjadi timeout di proses crop,  proses sluruhnya akan gagal seluruhnya. Dalam hal ini diperlukanlah suatu metode pemberian antrian tugas.
Salah satu cara lama yang too mainstream adalah dengan membuat database antrian tugas. Dalam kasus ini misal ada program php yang tugasnya ngecrop, dia akan cek di database antrian ada gak yang belum dicrop, kalo ada tugas dia proses, kalo gak ada tugas dia gak ngapa-ngapain. Masalah utama dari metode ini adalah looping-nya itu. Setiap saat si crop.php harus ngecek database padahal belum tentu ada tugas buat dia. Metode kaya gitu kan ngeborosin memori, akses io, dan prosesor. Mendingan si crop.php ini jalannya kalo ada antrian proses crop aja! Gimana dong solusinya? Karena judulnya tentang message queue, so pasti solusinya pake message queue dong. Kali ini saya mau ajak temen-temen tuk instalasi dan konfigurasi RabbitMQ. Website resmi si RabitMQ ada di http://www.rabbitmq.com. Sekarang mari install si RabbitMQ ini di Ubuntu 12.04.
Supaya terhubung dengan apt server RabbitMQ, mari kita tambahin sources-nya di Ubuntu. Buka terminal, ketik perintah sebagai berikut:
sudo gedit /etc/apt/sources.list
Abis itu tambahin “deb http://www.rabbitmq.com/debian/ testing main” di akhir baris. Ni tampilannya waktu saya tambahin:
sourcelist rabitmq
Tampilan sourcelist menggunakan gedit
Simpen terus tutup geditnya. Abis itu supaya gak ada warning public key, coba dari terminal pindahin aktif direktorinya ke documents, terus ketik perintah sebagai berikut:
wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
sudo apt-key add rabbitmq-signing-key-public.asc
Sekarang jalanin perintah update apt, sebagai berikut:
sudo apt-get update
Setelah menyelesaikan proses di atas, baru deh sekarang kita install RabbiMQ:
sudo apt-get install rabbitmq-server
Buat ngatur pembatasan file yang di-handle, kita bisa edit ulimit di file /etc/default/rabbitmq-server.
Untuk menjalankan rabbitmq di php, dibutuhkan library. Web rabbitmq merefer kehttps://github.com/rabbitmq/rabbitmq-tutorials/tree/master/php untuk library php-nya. Kita harus pake minimal php 5.3 supaya bisa ngejalanin php-amqlib. Linux kita juga harus terinstall git untuk mendownload. Instalasi php-amqlib sebagai berikut:
git clone http://github.com/videlalvaro/php-amqplib.git lib/php-amqplib
Tampilan di monitor saya:

Cloning into 'lib/php-amqplib'...
remote: Counting objects: 1260, done.
remote: Compressing objects: 100% (582/582), done.
remote: Total 1260 (delta 717), reused 1161 (delta 627)
Receiving objects: 100% (1260/1260), 5.21 MiB | 212 KiB/s, done.
Resolving deltas: 100% (717/717), done.
Setelah dilakukan, nanti file-file dari php-amqlib akan masuk ke folder_aktif/lib/php-amqlib. Copy-in tuh folder lib ke website kita, terus copy juga file-file di https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/php ke web kita. Abis itu coba deh jalanin php receive.php terus buka terminal baru, jalanin php send.php. Di terminal receive.php bakal muncul pesan:

[*] Waiting for messages. To exit press CTRL+C
[x] Received Hello World!
Kalau kita jalanin lagi di terminal lain php send.php maka si terminal receive bakal nampilin lagi[x] Received Hello World!, artinya pesan telah diterima dan setelah itu pesan dihilangkan dari queue.
Supaya makin mantap, silakan baca tutorial lengkap di website resminya, dijamin lebih joss daripada di sini. Demikian instalasi RabbitMQ, selanjutnya nanti kita bahas penggunaan RabbitMQ. (Arief Hidayatulloh)

PHP Mahir, Mahirin skill PHP lo!