เพิ่มส่วนขยาย POD ใน PHP5 ส่วนขยายนี้ให้ PDO คลาสในตัวของ PHP เพื่อเข้าถึงฐานข้อมูล ฐานข้อมูลที่แตกต่างกันใช้ชื่อวิธีการเดียวกันในการแก้ปัญหาการเชื่อมต่อฐานข้อมูลที่ไม่สอดคล้องกัน
เป้าหมายของ PDO คือ
การจัดหา API ที่มีน้ำหนักเบา ชัดเจน และสะดวกสบาย
รวมคุณสมบัติทั่วไปในไลบรารี RDBMS ต่างๆ โดยไม่ยกเว้นคุณสมบัติขั้นสูงเพิ่มเติม
มอบตัวเลือกนามธรรม/ความเข้ากันได้ในระดับที่มากขึ้นผ่านสคริปต์ PHP
คุณสมบัติของ PDO:
ประสิทธิภาพ PDO เรียนรู้ตั้งแต่เริ่มต้นเกี่ยวกับความสำเร็จและความล้มเหลวของการปรับขนาดฐานข้อมูลที่มีอยู่ เนื่องจากโค้ดของ PDO เป็นโค้ดใหม่ เราจึงมีโอกาสที่จะออกแบบประสิทธิภาพใหม่ตั้งแต่ต้นจนจบเพื่อใช้ประโยชน์จากฟีเจอร์ล่าสุดของ PHP 5
ความสามารถ. PDO ได้รับการออกแบบมาเพื่อให้ฟังก์ชันการทำงานของฐานข้อมูลทั่วไปเป็นรากฐาน ในขณะเดียวกันก็ให้การเข้าถึงคุณลักษณะเฉพาะของ RDBMS ได้อย่างง่ายดาย
เรียบง่าย. PDO ได้รับการออกแบบมาเพื่อให้การทำงานกับฐานข้อมูลเป็นเรื่องง่ายสำหรับคุณ API ไม่ได้บังคับเข้าไปในโค้ดของคุณและทำให้ชัดเจนว่าแต่ละการเรียกใช้ฟังก์ชันทำอะไร
ขยายได้ที่รันไทม์ ส่วนขยาย PDO เป็นแบบโมดูลาร์ ช่วยให้คุณสามารถโหลดไดรเวอร์สำหรับแบ็กเอนด์ฐานข้อมูลของคุณในขณะรันไทม์ โดยไม่ต้องคอมไพล์ใหม่หรือติดตั้งโปรแกรม PHP ใหม่ทั้งหมด ตัวอย่างเช่น ส่วนขยาย PDO_OCI จะแทนที่ส่วนขยาย PDO เพื่อใช้ API ฐานข้อมูล Oracle นอกจากนี้ยังมีไดรเวอร์สำหรับ MySQL, PostgreSQL, ODBC และ Firebird และยังมีอีกมากมายที่อยู่ระหว่างการพัฒนา [ตัวคั่น]
ติดตั้ง PDO
สิ่งที่ฉันมีที่นี่คือส่วนขยาย PDO สำหรับการพัฒนาภายใต้ WINDOWS หากคุณต้องการติดตั้งและกำหนดค่าภายใต้ Linux โปรดดูที่อื่น
ข้อกำหนดเวอร์ชัน: php5.1 และเวอร์ชันที่ใหม่กว่ารวมอยู่ในแพ็คเกจแล้ว โดยต้องดาวน์โหลด php5.0.x จาก pecl.php.net และวางไว้ในไลบรารีส่วนขยายของคุณ ซึ่งเป็นโฟลเดอร์ ext ของโฟลเดอร์ที่มี PHP อยู่ ;คู่มือบอกว่าเวอร์ชันก่อน 5.0 ไม่สามารถเรียกใช้ส่วนขยาย PDO ได้ การกำหนดค่า:
แก้ไขไฟล์การกำหนดค่า php.ini ของคุณเพื่อให้รองรับ pdo (หากคุณไม่เข้าใจ php.ini ให้คิดออกก่อน คุณต้องแก้ไข php.ini ที่แสดงเมื่อเรียกใช้ฟังก์ชัน phpinfo() ของคุณ) เปลี่ยนนามสกุล= php_pdo ลบเครื่องหมายอัฒภาคหน้า .dll เครื่องหมายอัฒภาคคือสัญลักษณ์ความคิดเห็นของไฟล์การกำหนดค่า php ยังมีอีกมาก
;ส่วนขยาย=php_pdo.dll
;ส่วนขยาย=php_pdo_firebird.dll
;ส่วนขยาย=php_pdo_informix.dll
;ส่วนขยาย=php_pdo_mssql.dll
;ส่วนขยาย=php_pdo_mysql.dll
;ส่วนขยาย=php_pdo_oci.dll
;ส่วนขยาย=php_pdo_oci8.dll
;ส่วนขยาย=php_pdo_odbc.dll
;ส่วนขยาย=php_pdo_pgsql.dll
;ส่วนขยาย=php_pdo_sqlite.dll
ฐานข้อมูลที่เกี่ยวข้องกับแต่ละส่วนขยายคือ:
ชื่อไดร์เวอร์ฐานข้อมูลที่รองรับ
PDO_DBLIB FreeTDS/Microsoft SQL Server/Sybase
PDO_FIREBIRD ไฟร์เบิร์ด/อินเตอร์เบส 6
PDO_INFORMIX IBM Informix ไดนามิกเซิร์ฟเวอร์
PDO_MYSQL MySQL 3.x/4.x
PDO_OCI อินเทอร์เฟซการโทรของออราเคิล
PDO_ODBC ODBC v3 (IBM DB2, unixODBC และ win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 และ SQLite 2
คุณต้องการใช้ฐานข้อมูลใดเพียงลบสัญลักษณ์ความคิดเห็น ";" ก่อนส่วนขยายที่เกี่ยวข้อง
การใช้พีดีโอ
ฉันถือว่าคุณได้ติดตั้ง mysql แล้ว หากไม่ใช่ โปรดหาวิธีติดตั้งก่อน ของฉันคือ mysql5.0.22 และคนอื่นๆ ที่ใช้ MySQL 4.0.26 ก็สามารถใช้ได้เช่นกัน
การเชื่อมต่อฐานข้อมูล:
เราใช้ตัวอย่างต่อไปนี้เพื่อวิเคราะห์ฐานข้อมูลการเชื่อมต่อ PDO
<?php
$dbms='mysql'; // Oracle ประเภทฐานข้อมูลใช้ ODI สำหรับนักพัฒนา การใช้ฐานข้อมูลที่แตกต่างกัน ตราบใดที่คุณเปลี่ยนสิ่งนี้ คุณไม่จำเป็นต้องจำฟังก์ชันมากมาย
$host='localhost'; //ชื่อโฮสต์ฐานข้อมูล
$dbName='test'; //ฐานข้อมูลที่ใช้
$user='root'; //ชื่อผู้ใช้การเชื่อมต่อฐานข้อมูล
$pass=''; //รหัสผ่านที่สอดคล้องกัน
$dsn="$dbms:host=$host;dbname=$dbName";
พยายาม {
$dbh = new PDO($dsn, $user, $pass); // การเริ่มต้นวัตถุ PDO หมายถึงการสร้างวัตถุการเชื่อมต่อฐานข้อมูล $dbh
echo "การเชื่อมต่อสำเร็จ<br/>";
/*คุณยังสามารถดำเนินการค้นหาได้
foreach ($dbh->query('เลือก * จาก FOO') เป็น $row) {
print_r($row); //คุณสามารถใช้ echo($GLOBAL); เพื่อดูค่าเหล่านี้
-
-
$dbh = โมฆะ;
} จับ (PDOException $e) {
die ("ข้อผิดพลาด!: " . $e->getMessage() . "<br/>");
-
//ตามค่าเริ่มต้น นี่ไม่ใช่การเชื่อมต่อที่ยาวนาน หากคุณต้องการเชื่อมต่อกับฐานข้อมูลเป็นเวลานาน คุณต้องเพิ่มพารามิเตอร์ที่ส่วนท้าย: array(PDO::ATTR_PERSISTENT => true) จะได้ดังนี้:
$db = PDO ใหม่($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
?>
แบบสอบถามฐานข้อมูล:
เราได้ดำเนินการค้นหาข้างต้นแล้ว และเราสามารถใช้แบบสอบถามต่อไปนี้ได้:
<?php
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER); //ตั้งค่าแอตทริบิวต์
$rs = $db->query("Select * FROM foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r($ผลลัพธ์_arr);
?>
เนื่องจากใช้เมธอด setAttribute() ในข้างต้น พารามิเตอร์ทั้งสองจึงถูกใส่เข้าไปเพื่อบังคับให้ชื่อฟิลด์เป็นตัวพิมพ์ใหญ่ ต่อไปนี้แสดงรายการพารามิเตอร์ของ PDO::setAttribute(): PDO::ATTR_CASE: บังคับให้ชื่อคอลัมน์อยู่ในรูปแบบตามรายละเอียดด้านล่าง (พารามิเตอร์ที่สอง):
PDO::CASE_LOWER: บังคับให้ชื่อคอลัมน์เป็นตัวพิมพ์เล็ก
PDO::CASE_NATURAL: ชื่อคอลัมน์อยู่ในรูปแบบดั้งเดิม
PDO::CASE_UPPER: บังคับให้ชื่อคอลัมน์เป็นตัวพิมพ์ใหญ่
PDO::ATTR_ERRMODE: ข้อความแสดงข้อผิดพลาด
PDO::ERRMODE_SILENT: ไม่แสดงข้อมูลข้อผิดพลาด แสดงเฉพาะรหัสข้อผิดพลาด
PDO::ERRMODE_WARNING: แสดงข้อผิดพลาดคำเตือน
PDO::ERRMODE_EXCEPTION: ส่งข้อยกเว้น
PDO::ATTR_ORACLE_NULLS (ใช้ได้ไม่เพียงแต่สำหรับ ORACLE เท่านั้น แต่ยังสำหรับฐานข้อมูลอื่นๆ ด้วย): ) ระบุค่าที่สอดคล้องกันใน php สำหรับค่า NULL ที่ส่งคืนโดยฐานข้อมูล
PDO::NULL_NATURAL: ไม่เปลี่ยนแปลง
PDO::NULL_EMPTY_STRING: สตริงว่างจะถูกแปลงเป็น NULL
PDO::NULL_TO_STRING: NULL จะถูกแปลงเป็นสตริงว่าง
PDO::ATTR_STRINGIFY_FETCHES: แปลงค่าตัวเลขเป็นสตริงเมื่อดึงข้อมูล
PDO::ATTR_STATEMENT_CLASS: ตั้งค่าคลาสคำสั่งที่ผู้ใช้ระบุซึ่งได้รับมาจาก PDOStatement ไม่สามารถใช้กับอินสแตนซ์ PDO ถาวรได้ ต้องใช้อาร์เรย์ (ชื่อคลาสสตริง อาร์เรย์ (ตัวสร้างแบบผสม)
PDO::ATTR_AUTOCOMMIT (มีใน OCI, Firebird และ MySQL): ว่าจะคอมมิตทุกคำสั่งโดยอัตโนมัติหรือไม่
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (มีอยู่ใน MySQL): ใช้แบบสอบถามแบบบัฟเฟอร์
$rs->setFetchMode(PDO::FETCH_ASSOC); ในตัวอย่างคือ PDOStatement::setFetchMode() ซึ่งเป็นการประกาศประเภทการส่งคืน
มีดังต่อไปนี้:
PDO::FETCH_ASSOC - รูปแบบอาร์เรย์ที่เชื่อมโยง
PDO::FETCH_NUM -- แบบฟอร์มอาร์เรย์ดัชนีตัวเลข
PDO::FETCH_BOTH -- ทั้งสองมีอยู่ในรูปแบบอาร์เรย์ซึ่งเป็นค่าเริ่มต้น
PDO::FETCH_OBJ -- ในรูปแบบของวัตถุ คล้ายกับ mysql_fetch_object() ก่อนหน้า
สำหรับการประกาศประเภทการคืนสินค้าเพิ่มเติม (PDOStatement::method name) โปรดดูคู่มือ
แทรก อัปเดต ลบข้อมูล
$db->exec("Delete FROM `xxxx_menu` โดยที่ mid=43");
สรุปการดำเนินการข้างต้นโดยย่อ:
การดำเนินการสืบค้นส่วนใหญ่เป็น PDO::query(), PDO::exec(), PDO::prepare()
PDO::query() ส่วนใหญ่จะใช้สำหรับการดำเนินการที่ส่งคืนผลลัพธ์ที่บันทึกไว้ โดยเฉพาะการดำเนินการเลือก
PDO::exec() มีไว้สำหรับการดำเนินการที่ไม่ส่งคืนชุดผลลัพธ์เป็นหลัก เช่น แทรก อัปเดต ลบ และการดำเนินการอื่น ๆ ผลลัพธ์ที่ส่งคืนคือจำนวนคอลัมน์ที่ได้รับผลกระทบจากการดำเนินการปัจจุบัน
PDO::prepare() ส่วนใหญ่เป็นการดำเนินการก่อนการประมวลผล คุณต้องใช้ $rs->execute() เพื่อดำเนินการคำสั่ง SQL ในการประมวลผลล่วงหน้า วิธีนี้สามารถผูกพารามิเตอร์และไม่สามารถอธิบายได้ง่ายๆ ในบทความนี้ คุณสามารถดูคู่มือและเอกสารอื่นๆ ได้
การดำเนินการหลักในการรับชุดผลลัพธ์คือ: PDOStatement::fetchColumn(), PDOStatement::fetch(), PDOStatement::fetchALL()
PDOStatement::fetchColumn() เป็นฟิลด์ของเรกคอร์ดแรกที่ระบุในผลลัพธ์การดึงข้อมูล ค่าเริ่มต้นคือฟิลด์แรก
PDOStatement::fetch() ใช้เพื่อรับบันทึก
PDOStatement::fetchAll() คือการรวบรวมชุดเรคคอร์ดทั้งหมดเป็นชุดเดียว เพื่อให้ได้ผลลัพธ์ คุณสามารถตั้งค่าประเภทของชุดผลลัพธ์ที่ต้องการผ่าน PDOStatement::setFetchMode
นอกจากนี้ยังมีการดำเนินการโดยรอบสองรายการ การดำเนินการหนึ่งคือ PDO::lastInsertId() และ PDOStatement::rowCount() PDO::lastInsertId() ส่งคืนการดำเนินการแทรกครั้งล่าสุด และประเภทคอลัมน์คีย์หลักคือ ID การเพิ่มอัตโนมัติครั้งสุดท้าย
PDOStatement::rowCount() ส่วนใหญ่จะใช้สำหรับชุดผลลัพธ์ที่ได้รับผลกระทบจากการดำเนินการลบ แทรก และอัปเดตของ PDO::query() และ PDO::prepare() และไม่ถูกต้องสำหรับเมธอด PDO::exec() และเลือกดำเนินการ