PDO (PHP Data Object) merupakan hal baru di PHP 5. Saat PHP 6 hendak dirilis, PHP 6 hanya menggunakan PDO untuk memproses database secara default, dan akan memindahkan semua ekstensi database ke PECL, sehingga defaultnya tidak ada lagi. php_mysql.dll dan sejenisnya, apa yang harus saya lakukan? Kami hanya bisa mengikuti perkembangan zaman, jadi saya mencoba PDO. (Artikel ini hanya entry-level, para ahli bisa melewatkannya, haha)
[Apa itu PDO]
PDO adalah fitur baru utama yang ditambahkan ke PHP 5, karena sebelum PHP 5, php4/php3 memiliki banyak ekstensi database untuk berkomunikasi satu sama lain koneksi dan pemrosesan, php_mysql.dll, php_pgsql.dll, php_mssql.dll, php_sqlite.dll dan ekstensi lainnya untuk menghubungkan MySQL, PostgreSQL, MS SQL Server, SQLite, demikian pula, kita harus menggunakan ADOdb, PEAR::DB, PHPlib : :Kelas abstrak database seperti DB sangat rumit dan tidak efisien untuk membantu kita. Lagi pula, bagaimana efisiensi kode PHP bisa begitu tinggi sehingga kita bisa langsung menulisnya dalam C/C++? Oleh karena itu, kemunculan PDO tidak dapat dihindari. Setiap orang harus menerima penggunaannya dengan sikap belajar yang tenang. Mungkin Anda akan menyadari bahwa hal ini dapat menghemat banyak tenaga.
[Menginstal PDO]
Saya menjalankan Windows XP SP2, jadi seluruh proses dilakukan di Windows. Sedangkan untuk Linux/FreeBSD dan platform lainnya, silakan temukan informasinya dan atur instalasinya sendiri.
Milik saya adalah PHP 5.1.4, yang sudah dilengkapi dengan ekstensi php_pdo.dll, tetapi memerlukan sedikit pengaturan sebelum dapat digunakan.
Buka c:windowsphp.ini, yang merupakan file konfigurasi PHP saya, dan temukan baris berikut:
extension_dir
Ini adalah direktori tempat ekstensi PHP 5 saya berada: C:php5ext, maka saya akan melakukannya Ubah baris ini menjadi:
extension_dir = "C:/php5/ext"
dan kemudian temukan di bawah php.ini:
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;;;;;;;;;;;;;;;;;;;;;;
Ada banyak hal yang mirip dengan ;extension=php_mbstring.dll di bawah ini tambahkan di akhir. Ekstensi PDO kami:
extension=php_pdo.dll
ekstensi=php_pdo_mysql.dll
ekstensi=php_pdo_pgsql.dll
ekstensi=php_pdo_sqlite.dll
ekstensi=php_pdo_mssql.dll
ekstensi=php_pdo_odbc.dll
ekstensi=php_pdo_firebird.dll
;extension=php_pdo_oci8.dll
Berbagai driver PDO dapat ditambahkan, tetapi php_pdo_oci8.dll berikut ini, karena saya belum menginstal database Oralce, tidak memilikinya, jadi saya menggunakan titik koma untuk mengomentarinya. Kemudian restart server web kita, IIS/Apache, milik saya IIS, hei, Anda memandang rendah saya, di Windows, itu mudah.
Setelah memulai ulang, tulis file phpinfo.php di direktori dokumen server web kami dan tambahkan ini:
<?
phpinfo();
?>
Lalu buka browser cantik kita: IE/FireFox, punya saya FireFox 2.0, saya baru download, bagus, saya tidak takut dengan software nakal, haha.
Masuk ke browser: http://localhost/phpinfo.php . Jika jalur Anda ke halaman ini tidak konsisten, silakan masukkan sendiri.
Di konten keluaran, jika Anda berhasil melihatnya:
PDO
Dukungan PDO diaktifkan
Driver PDO mysql, pgsql, sqlite, mssql, odbc, firebird.
Ada berbagai instruksi driver di belakang: PDO_Firebird, pdo_mssql, pdo_mysql, PDO_ODBC, pdo_pgsql,
pdo_sqlite .
[Tes Cepat]
Saya menggunakan MySQL 4.0.26, tapi saya pribadi menyarankan semua orang untuk menggunakan MySQL 4.1.x atau MySQL 5.0.x, karena versi tersebut memiliki banyak hal menarik yang patut dipelajari. Yang perlu dihubungkan oleh PDO kami adalah MySQL 4.0 saya. Jika Anda belum menginstal MySQL, silakan instal sendiri. Kami telah membuat MySQL dan menambahkan tabel foo ke perpustakaan pengujian, termasuk empat bidang seperti id, nama, jenis kelamin, dan waktu.
Kami mulai membuat aplikasi PDO pertama dan membuat file pdo.php di direktori dokumen Web:
<?php
$dsn = "mysql:host=localhost;namadb=tes";
$db = PDO baru($dsn, 'root', '');
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
gema $hitung;
$db = nol;
?>
Saya tidak mengerti maksudnya, mari kita jelaskan pelan-pelan. Baris ini:
$dsn = "mysql:host=localhost;dbname=test";
adalah untuk membuat DSN (sumber data) kita. Lihatlah informasi di dalamnya: tipe database adalah mysql, alamat host adalah localhost, dan nama database adalah tes. Hanya beberapa informasi. Metode konstruksi sumber data dari database yang berbeda berbeda.
$db = new PDO($dsn, 'root', '');
Inisialisasi objek PDO. Parameter pertama konstruktor adalah sumber data kita, parameter kedua adalah pengguna yang terhubung ke server database, dan parameter ketiga adalah kata sandi. . Kami tidak dapat menjamin bahwa koneksi berhasil. Kami akan membicarakan pengecualian nanti.
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
echo $count;
memanggil objek PDO kami yang berhasil terhubung untuk menjalankan kueri. Kueri ini adalah operasi untuk memasukkan catatan. Menggunakan metode PDO::exec() akan mengembalikan hasil yang mempengaruhi catatan, jadi kami mengeluarkan hasil ini. Terakhir, Anda masih perlu mengakhiri sumber daya objek:
$db = null;
Secara default, ini bukan koneksi panjang ke database, Anda perlu menambahkan parameter terakhir: array(PDO::ATTR_PERSISTENT). => true). Jadinya seperti ini:
$db = new PDO( $dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));
Ini mungkin tidak jauh berbeda dari yang sebelumnya, tapi agak mirip dengan ADOdb.
[Lanjutkan belajar]
Jika kita ingin mengekstrak data, sebaiknya gunakan fungsi akuisisi data. ($db yang digunakan di bawah adalah semua objek yang terhubung di atas)
<?php
foreach($db->query("PILIH * DARI foo")){
print_r($baris);
}
?>
Kita juga dapat menggunakan metode akuisisi ini:
<?php
$rs = $db->query("PILIH * DARI foo");
while($baris = $rs->mengambil()){
print_r($baris);
}
?>
Jika Anda ingin memasukkan semua data ke dalam array sekaligus, Anda dapat melakukan ini:
<?php
$rs = $db->query("PILIH * DARI foo");
$result_arr = $rs->fetchAll();
print_r($hasil_arr);
?>
Susunan
([0] => Himpunan(
[id] => 1
[0] => 1
[nama] => heiyeluren
[1] =>heiyeluren
[gender] =>Pria[2] =>Pria[waktu] =>28-10-2006 23:14:23
[3] => 28-10-2006 23:14:23
)
}
,
yang merupakan pemborosan sumber daya
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$rs = $db->query("PILIH * DARI foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r($hasil_arr);
?>
Perhatikan kode di atas, metode setAttribute() adalah menyetel beberapa atribut. Atribut utamanya adalah: PDO::ATTR_CASE, PDO::ATTR_ERRMODE, dll. Yang perlu kita setel di sini adalah PDO::ATTR_CASE, yaitu , kami menggunakan indeks terkait untuk mendapatkan data Saat mengatur, ada beberapa opsi apakah indeks terkait dalam huruf besar atau kecil:
PDO::CASE_LOWER -- Memaksa nama kolom menjadi huruf kecil PDO::CASE_NATURAL -- Nama kolom akan menjadi dengan cara aslinya PDO::CASE_UPPER -- Memaksa nama kolom menjadi huruf besar
Kami menggunakan metode setFetchMode untuk mengatur tipe nilai kembalian untuk mendapatkan kumpulan hasil. Tipe yang sama adalah:
PDO::FETCH_ASSOC -- array asosiatif dari PDO ::FETCH_NUM -- bentuk array indeks numerik PDO::FETCH_BOTH -- kedua bentuk array. Ya, ini adalah PDO::FETCH_OBJ default - dalam bentuk objek, mirip dengan mysql_fetch_object()
sebelumnya gunakan PDO::FETCH_ASSOC. Apa yang digunakan secara spesifik tergantung pada kebutuhan Anda sendiri. Jenis akuisisi lainnya manual referensi.
Selain cara pengambilan data di atas, ada juga cara ini:
<?php
$rs = $db->siapkan("PILIH * DARI foo");
$rs->eksekusi();
while($baris = $rs->mengambil()){
print_r($baris);
}
?>
Sebenarnya hampir sama. Jika Anda ingin mendapatkan hasil suatu bidang dalam catatan tertentu, Anda dapat menggunakan PDOStatement::fetchColumn():
<?php
$rs = $db->query("PILIH JUMLAH(*) DARI foo");
$col = $rs->fetchColumn();
gema $kol;
?>
Umumnya, FetchColumn() digunakan untuk melakukan statistik hitungan atau beberapa record yang hanya memerlukan satu field saja, mudah dioperasikan.
Untuk meringkas secara singkat operasi di atas:
operasi kueri pada dasarnya adalah PDO::query(), PDO::exec(), dan PDO::prepare(). PDO::query() terutama digunakan untuk operasi yang mengembalikan hasil yang direkam, terutama operasi SELECT. PDO::exec() terutama digunakan untuk operasi yang tidak mengembalikan kumpulan hasil, seperti INSERT, UPDATE, DELETE dan operasi lainnya. Ia mengembalikan Hasilnya adalah jumlah kolom yang dipengaruhi oleh operasi saat ini. PDO::prepare() pada dasarnya adalah operasi prapemrosesan. Anda perlu menggunakan $rs->execute() untuk mengeksekusi pernyataan SQL dalam prapemrosesan. Metode ini dapat mengikat parameter dan relatif kuat . Semua Orang Anda dapat merujuk ke manual dan dokumentasi lainnya. Operasi utama untuk mendapatkan kumpulan hasil adalah: PDOStatement::fetchColumn(), PDOStatement::fetch(), PDOStatement::fetchALL(). PDOStatement::fetchColumn() adalah bidang rekaman pertama yang ditentukan dalam hasil pengambilan. PDOStatement::fetch() digunakan untuk mendapatkan record, dan PDOStatement::fetchAll() digunakan untuk mendapatkan semua kumpulan record menjadi satu. Untuk mendapatkan hasilnya, Anda dapat mengatur jenis kumpulan hasil yang diperlukan melalui PDOStatement::setFetchMode .
Ada juga dua operasi di sekitarnya, satu adalah PDO::lastInsertId() dan PDOStatement::rowCount(). PDO::lastInsertId() mengembalikan operasi penyisipan terakhir, dan jenis kolom kunci utama adalah ID kenaikan otomatis terakhir. PDOStatement::rowCount() terutama digunakan untuk kumpulan hasil yang dipengaruhi oleh operasi DELETE, INSERT, dan UPDATE dari PDO::query() dan PDO::prepare(), dan tidak valid untuk metode PDO::exec() dan operasi SELECT.
[Penanganan Kesalahan]
Apa yang harus Anda lakukan jika menemukan kesalahan dalam program? Di sini kami menjelaskan informasi kesalahan dan penanganan pengecualian kelas PDO.
1. Pendekatan berorientasi objek.
Pertama mari kita lihat cara menangani kesalahan koneksi, dll., dan gunakan pendekatan berorientasi objek untuk menanganinya:
<?php
mencoba {
$db = PDO baru('mysql:host=localhost;dbname=test', $pengguna, $pass);
$db = nol;
} tangkapan (PDOException $e) {
cetak "Kesalahan: " .$e->getMessage() "<br/>";
mati();
}
?>
Di sini kita menggunakan fitur penanganan pengecualian berorientasi objek PHP 5. Jika ada pengecualian, kita akan menginisialisasinya dengan memanggil PDOException untuk menginisialisasi kelas pengecualian.
Struktur atribut kelas pengecualian PDOException:
<?php
kelas PDOException memperluas Pengecualian
{
public $errorInfo = null; // Untuk informasi kesalahan, Anda dapat menghubungi PDO::errorInfo() atau PDOStatement::errorInfo() untuk mengakses $message yang dilindungi; // Untuk informasi pengecualian, Anda dapat mencoba Exception::getMessage() mengakses $code yang dilindungi; // kode kesalahan status SQL, yang dapat diakses menggunakan Exception::getCode()
}
?>
Kelas penanganan pengecualian ini terintegrasi dengan kelas penanganan pengecualian bawaan PHP 5. Mari kita lihat sekilas struktur kelas penanganan pengecualian bawaan PHP 5:
<?php
kelasException
{
//Property protected $message = 'Pengecualian tidak diketahui'; //Pesan pengecualian dilindungi $code = 0; //Kode pengecualian yang ditentukan pengguna dilindungi $file; dimana pengecualian terjadi Nomor baris
// Metode fungsi akhir getMessage(); // Mengembalikan informasi pengecualian fungsi akhir getCode(); // Mengembalikan kode pengecualian fungsi akhir getFile(); // Mengembalikan nama file tempat pengecualian terjadi fungsi akhir getLine (); // Mengembalikan nomor baris kode tempat pengecualian terjadi fungsi akhir getTrace(); // backtrace() fungsi akhir array getTraceAsString();
}
?>
Sejalan dengan itu, getFile() dan getLine() dapat dipanggil dengan tepat dalam kode untuk menemukan kesalahan dan membuat proses debug menjadi lebih nyaman.
2. Gunakan pendekatan berorientasi proses
untuk melihat kode terlebih dahulu:
<?
$db = PDO baru('mysql:host=localhost;dbname=test', $pengguna, $pass);
$rs = $db->query("PILIH aa,bb,cc DARI foo");
if ($db->kode kesalahan() != '00000'){
print_r($db->errorInfo());
KELUAR;
}
$arr = $rs->fetchAll();
print_r($arr);
$db = nol;
?>
Objek PDO dan PDOStatement memiliki metode errorCode() dan errorInfo(). Jika tidak ada kesalahan, errorCode() akan mengembalikan: 00000, jika tidak, beberapa kode kesalahan akan dikembalikan. errorInfo() mengembalikan array, termasuk kode kesalahan yang ditentukan oleh kode kesalahan PHP dan MySQL dan informasi kesalahan. Struktur array adalah sebagai berikut:
Array
(
[0] => 42S22
[1] => 1054
[2] => Kolom 'aaa' tidak diketahui di 'daftar bidang'
)
Setelah setiap query dieksekusi, hasil errorCode() adalah yang terbaru, sehingga kita dapat dengan mudah mengontrol sendiri tampilan pesan kesalahannya.
[Ringkasan sederhana]
Dari penggunaan di atas, kita dapat melihat bahwa PDO memang kuat. Ada juga beberapa hal lain yang belum saya sebutkan, seperti parameter pengikatan, preprocessing, prosedur tersimpan, pemrosesan transaksi dan fungsi lainnya. Selain itu, terdapat struktur DSN perluasan data yang berbeda. Basis data Oracle sendiri memiliki banyak hal khusus yang memerlukan studi dan pemahaman mendalam. Artikel ini hanya menjelaskan secara singkat beberapa pengetahuan pengantar, yang dapat dianggap sebagai pemahaman sederhana tentang PDO.