0x01: Uji apakah PDO berhasil diinstal
Jalankan kode berikut. Jika parameternya salah, itu berarti PDO telah diinstal. Jika objek tidak ada, modifikasi file konfigurasi php php.ini dan batalkan komentar di php_pdo_yourssqlserverhere.extis sebelumnya.
Salinan kode adalah sebagai berikut:
$ test = PDO baru ();
0x02: Sambungkan ke database
Jalankan server Apache dan konfirmasi bahwa server telah dijalankan dan instalasi PDO berhasil. Kemudian mari kita terhubung ke database.
Salinan kode adalah sebagai berikut:
$ dsn = 'mysql: dbname = demo; host = localhost; port = 3306';
$ username = 'root';
$ password = 'password_here';
mencoba {
$ db = PDO baru ($ dsn, $ username, $ password);
} catch (pdoException $ e) {
Die ('tidak dapat terhubung ke database:
'. $ e);
}
0x03: Kueri Dasar
Menggunakan kueri dan eksekutif di PDO membuat database kueri sangat sederhana. Jika Anda ingin mendapatkan jumlah baris hasil kueri, itu sangat berguna untuk pernyataan kueri tertentu.
Salinan kode adalah sebagai berikut:
$ pernyataan = <<< sql
Pilih *
Dari `foods`
Dimana `sehat` = 0
SQL;
$ foods = $ db-> kueri ($ pernyataan);
Jika kueri di atas benar, $ Foods sekarang menjadi objek pernyataan PDO, dari mana kita bisa mendapatkan hasil yang kita butuhkan dan berapa banyak set hasil yang telah kita tanya total.
0x04: Dapatkan jumlah baris
Jika Anda menggunakan database MySQL, pernyataan PDO berisi metode RowCount untuk mendapatkan jumlah baris dalam set hasil, seperti yang ditunjukkan pada kode berikut:
Salinan kode adalah sebagai berikut:
echo $ foods-> rowcount;
0x05: Set Hasil Traversal
Statmen PDO dapat dilintasi menggunakan pernyataan forech, seperti yang ditunjukkan pada kode berikut:
Salinan kode adalah sebagai berikut:
foreach ($ foods-> fetchall () as $ food) {
echo $ food ['name']. '
';
}
PDO juga mendukung metode pengambilan, yang hanya mengembalikan hasil pertama.
0x06: Escape Karakter Khusus yang Dimasukkan oleh Pengguna
PDO menyediakan metode yang disebut Quote, yang memungkinkan karakter khusus untuk melarikan diri dari tempat -tempat dengan kutipan dalam string input.
Salinan kode adalah sebagai berikut:
$ input = ini adalah '' '' 'Str'ing yang sangat bahaya
Setelah transfer menggunakan metode penawaran:
Salinan kode adalah sebagai berikut:
$ db-> quote ($ input): 'Ini adalah/' s/'a/'/'/' Bahaya cantik/'rous str/' ing '
0x07: exec ()
PDO dapat menggunakan metode exec () untuk mengimplementasikan operasi pembaruan, hapus, dan masukkan. Setelah eksekusi, itu akan mengembalikan jumlah baris yang terpengaruh:
Salinan kode adalah sebagai berikut:
$ pernyataan = <<< sql
Hapus dari `Foods`
Di mana `sehat` = 1;
SQL;
echo $ db-> exec ($ pernyataan);
0x08: Pernyataan preprocessing
Meskipun metode dan kueri EXEC masih banyak digunakan dan didukung dalam PHP, situs web resmi PHP masih mengharuskan semua orang untuk menggunakan pernyataan preprocessing untuk menggantikannya. Mengapa? Terutama karena: lebih aman. Pernyataan preprocessing tidak secara langsung memasukkan parameter ke dalam kueri aktual, yang menghindari banyak suntikan SQL potensial.
Namun, untuk beberapa alasan, PDO sebenarnya tidak benar -benar menggunakan preprocessing. Ini mensimulasikan metode preprocessing, memasukkan data parameter ke dalam pernyataan sebelum meneruskan pernyataan ke server SQL, yang membuat beberapa sistem rentan terhadap injeksi SQL.
Jika SQL Server Anda tidak terlalu mendukung preprocessing, kami dapat dengan mudah memperbaiki masalah ini dengan melewati parameter selama inisialisasi PDO sebagai berikut:
Salinan kode adalah sebagai berikut:
$ db-> setAttribute (pdo :: attr_emulate_prepares, false);
Ini adalah pernyataan preprocessing pertama kami:
Salinan kode adalah sebagai berikut:
$ pernyataan = $ db-> persiapkan ('pilih * dari makanan di mana `name` =? dan` sehat` =?');
$ pernyataan2 = $ db-> persiapkan ('pilih * dari makanan di mana `name` =: nama dan` sehat` =: sehat)';
Seperti yang ditunjukkan dalam kode di atas, ada dua cara untuk membuat parameter, nama dan anonim (tidak dapat muncul dalam satu pernyataan pada saat yang sama). Kemudian Anda dapat menggunakan BindValue untuk mengetikkan input Anda:
Salinan kode adalah sebagai berikut:
$ Pernyataan-> BindValue (1, 'Cake');
$ pernyataan-> BindValue (2, true);
$ pernyataan2-> bindValue (': name', 'pie');
$ pernyataan2-> bindValue (': sehat', false);
Perhatikan bahwa saat menggunakan parameter yang disebutkan, Anda harus menyertakan usus besar (:). PDO juga memiliki metode BindParam, yang dapat mengikat nilai numerik dengan referensi, yaitu, hanya mencari nilai numerik yang sesuai ketika pernyataan dieksekusi.
Satu -satunya hal yang tersisa untuk dilakukan sekarang adalah menjalankan pernyataan kami:
Salinan kode adalah sebagai berikut:
$ pernyataan-> execute ();
$ pernyataan2-> execute ();
// Dapatkan hasil kami:
$ cake = $ pernyataan-> fetch ();
$ pie = $ pernyataan2-> fetch ();
Untuk menghindari menggunakan hanya fragmen kode bindValue, Anda dapat menggunakan array untuk memberikan metode eksekusi sebagai parameter, seperti ini:
Salinan kode adalah sebagai berikut:
$ Pernyataan-> Execute (array (1 => 'Cake', 2 => true));
$ pernyataan2-> execute (array (': name' => 'pie', ': sehat' => false));
0x09: Transaksi
Transaksi adalah untuk menjalankan satu set kueri, tetapi tidak menyimpan dampaknya pada database. Keuntungan dari ini adalah bahwa jika Anda menjalankan 4 pernyataan sisipan yang saling tergantung, ketika seseorang gagal, Anda dapat memutar kembali sehingga data lain tidak dapat dimasukkan ke dalam database, memastikan bahwa bidang yang saling bergantung dapat dimasukkan dengan benar. Anda perlu memastikan bahwa mesin basis data yang Anda gunakan untuk mendukung transaksi.
0x10: Mulai transaksi
Anda cukup menggunakan metode beginTransaction () untuk memulai transaksi:
Salinan kode adalah sebagai berikut:
$ db-> beginTransaction ();
$ db-> intransaction (); // BENAR!
Kemudian Anda dapat terus menjalankan pernyataan operasi database Anda dan mengirimkan transaksi di akhir:
Salinan kode adalah sebagai berikut:
$ db-> commit ();
Ada juga metode rollback () yang mirip dengan MySQLI, tetapi tidak membalas semua jenis (misalnya, menggunakan tabel drop di MySQL), metode ini tidak benar -benar dapat diandalkan, saya sarankan mencoba menghindari mengandalkan metode ini.
0x11: Opsi Berguna Lainnya
Ada beberapa opsi yang dapat Anda pertimbangkan untuk digunakan. Ini dapat dimasukkan sebagai parameter keempat saat objek Anda diinisialisasi.
Salinan kode adalah sebagai berikut:
$ option = array ($ option1 => $ value1, $ option [..]);
$ db = PDO baru ($ dsn, $ username, $ password, $ options);
Pdo :: attr_default_fetch_mode
Anda dapat memilih jenis set hasil apa yang akan dikembalikan PDO, seperti pdo :: fetch_assoc, yang akan memungkinkan Anda untuk menggunakan $ hasil ['column_name'], atau pdo :: fetch_obj, yang akan mengembalikan objek anonim sehingga Anda dapat menggunakan $ result-> column_name
Anda juga dapat memasukkan hasilnya ke dalam kelas (model) tertentu, dengan mengatur mode baca untuk setiap permintaan individu, seperti ini:
Salinan kode adalah sebagai berikut:
$ query = $ db-> query ('pilih * dari `foods`');
$ foods = $ query-> fetchall (pdo :: fetch_class, 'food');
PDO :: ATTR_ERRMODE
Kami telah menjelaskan ini di atas, tetapi mereka yang suka Trycatch perlu digunakan: pdo :: errmode_exception. Jika Anda ingin melempar peringatan PHP untuk alasan apa pun, gunakan PDO :: Errmode_warning.
Pdo :: attr_timeout
Ketika Anda ingin memuat waktu, Anda dapat menggunakan properti ini untuk menentukan waktu batas waktu untuk kueri Anda dalam hitungan detik. Perhatikan bahwa jika waktu yang Anda atur melebihi waktu, pengecualian E_Warning default akan dilemparkan kecuali PDO :: ATTR_ERRMODE diubah.