บันทึกการศึกษา PHPPDO lib.culog.cn 13 พฤศจิกายน 2550 09:36 ผู้แต่ง: Liu Shui Meng Chun [ใหญ่ กลาง เล็ก]
■พีดีโอคืออะไร?
ส่วนขยาย POD (PHP Data Object) ถูกเพิ่มใน PHP5 ใน PHP6 จะใช้ PDO เป็นค่าเริ่มต้นเพื่อเชื่อมต่อกับฐานข้อมูล ส่วนขยายนี้จัดเตรียม PDO คลาส PHP ในตัวเพื่อเข้าถึงฐานข้อมูล ฐานข้อมูลที่แตกต่างกันใช้ชื่อวิธีการเดียวกันในการแก้ปัญหาการเชื่อมต่อฐานข้อมูลที่ไม่สอดคล้องกัน
ฉันกำหนดค่าสำหรับการพัฒนาภายใต้ windows
■เป้าหมายของ PDO คือการจัดหา API ที่มีน้ำหนักเบา ชัดเจน และสะดวกสบาย ซึ่งรวมคุณลักษณะทั่วไปของไลบรารี RDBMS ต่างๆ เข้าด้วยกัน แต่ไม่ได้แยกคุณลักษณะขั้นสูงเพิ่มเติม มอบตัวเลือกนามธรรม/ความเข้ากันได้ในระดับที่มากขึ้นผ่านสคริปต์ PHP
■คุณสมบัติของ PDO:
ผลงาน. PDO เรียนรู้ตั้งแต่เริ่มต้นเกี่ยวกับความสำเร็จและความล้มเหลวของการปรับขนาดฐานข้อมูลที่มีอยู่ เนื่องจากโค้ดของ PDO เป็นโค้ดใหม่ เราจึงมีโอกาสที่จะออกแบบประสิทธิภาพใหม่ตั้งแต่ต้นจนจบเพื่อใช้ประโยชน์จากฟีเจอร์ล่าสุดของ PHP 5 ความสามารถ. PDO ได้รับการออกแบบมาเพื่อให้ฟังก์ชันการทำงานของฐานข้อมูลทั่วไปเป็นรากฐาน ในขณะเดียวกันก็ให้การเข้าถึงคุณลักษณะเฉพาะของ RDBMS ได้อย่างง่ายดาย เรียบง่าย. PDO ได้รับการออกแบบมาเพื่อให้การทำงานกับฐานข้อมูลเป็นเรื่องง่ายสำหรับคุณ API ไม่ได้บังคับเข้าไปในโค้ดของคุณและทำให้ชัดเจนว่าแต่ละการเรียกใช้ฟังก์ชันทำอะไร ขยายได้ที่รันไทม์ ส่วนขยาย PDO เป็นแบบโมดูลาร์ ช่วยให้คุณสามารถโหลดไดรเวอร์สำหรับแบ็กเอนด์ฐานข้อมูลของคุณในขณะรันไทม์ โดยไม่ต้องคอมไพล์ใหม่หรือติดตั้งโปรแกรม PHP ใหม่ทั้งหมด ตัวอย่างเช่น ส่วนขยาย PDO_OCI ใช้ API ฐานข้อมูล Oracle แทนส่วนขยาย PDO นอกจากนี้ยังมีไดรเวอร์สำหรับ 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() ของคุณ)
มัด
ลบเครื่องหมายอัฒภาคที่ด้านหน้าของ extension=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_DBLIBFreeTDS / Microsoft SQL Server / SybasePDO_FIREBIRDFirebird/Interbase 6PDO_INFORMIXIBM Informix Dynamic ServerPDO_MYSQLMySQL 3.x/4.xPDO_OCIOracle Call InterfacePDO_ODBCODBC v3 (IBM DB2, unixODBC และ win32 ODBC)PDO_PGSQLPostgreSQLPDO_S QLITESQLite 3 และ SQLite 2
ฐานข้อมูลใดที่คุณต้องการใช้เพียงแค่ใส่ข้อมูลที่สอดคล้องกัน เพียงลบสัญลักษณ์ความคิดเห็น ";" ออกก่อนที่จะขยาย
■การใช้ PDO
ฉันถือว่าคุณได้ติดตั้ง 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=newPDO($dsn,$user,$pass);//การเริ่มต้นวัตถุ PDO หมายถึงการสร้างวัตถุการเชื่อมต่อฐานข้อมูล $dbh
echo "การเชื่อมต่อสำเร็จ<br/>";
/*คุณยังสามารถดำเนินการค้นหา
foreach($dbh->query('SELECT * from FOO')as$row){
print_r($row);//คุณสามารถใช้ echo($GLOBAL); เพื่อดูค่าเหล่านี้
-
-
$dbh=null;
} จับ (PDOException$e){
die("ข้อผิดพลาด!: ".$e->getMessage().."<br/>");
-
//ตามค่าเริ่มต้น นี่ไม่ใช่การเชื่อมต่อที่ยาวนาน หากคุณต้องการเชื่อมต่อกับฐานข้อมูลเป็นเวลานาน คุณต้องเพิ่มพารามิเตอร์ที่ส่วนท้าย: array(PDO::ATTR_PERSISTENT => true) จะได้ดังนี้:
$db=newPDO($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: บังคับให้ชื่อคอลัมน์เป็นตัวพิมพ์
เล็ก : :CASE_NATURAL: ชื่อคอลัมน์เป็นไปตามวิธีเดิม
PDO::CASE_UPPER: บังคับชื่อคอลัมน์ให้เป็นตัวพิมพ์ใหญ่
PDO::ATTR_ERRMODE: ข้อความแสดงข้อผิดพลาด
PDO::ERRMODE_SILENT: ไม่แสดงข้อมูลข้อผิดพลาด
แสดง
เฉพาะรหัสข้อผิดพลาด
PDO::ATTR_ORACLE_NULLS (ใช้ได้ไม่เพียงแต่สำหรับ ORACLE เท่านั้น แต่ยังสำหรับฐานข้อมูลอื่นๆ ด้วย): ) ระบุค่าที่สอดคล้องกันใน php สำหรับค่า NULL ที่ส่งคืนโดยฐานข้อมูล
PDO::NULL_NATURAL: ไม่เปลี่ยนแปลง
PDO::NULL_EMPTY_STRING: สตริง
ว่างถูกแปลงเป็น NULL
PDO::ATTR_STRINGIFY_FETCHES: แปลงค่าตัวเลขเป็นสตริงเมื่อดึงข้อมูล ต้องใช้บูล
PDO::ATTR_STATEMENT_CLASS: ตั้งค่าคลาสคำสั่งที่ผู้ใช้ระบุซึ่งมาจาก PDOStatement ไม่สามารถใช้กับอินสแตนซ์ PDO ถาวรได้ (ชื่อคลาสสตริง, อาร์เรย์ (ตัวสร้างแบบผสม) )) .
PDO::ATTR_AUTOCOMMIT(มีอยู่ใน OCI, Firebird และ 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("ลบจาก `xxxx_menu` โดยที่ mid=43");
เพื่อสรุปการดำเนินการข้างต้นโดยย่อ:
การดำเนินการสืบค้นส่วนใหญ่เป็น PDO::query(), PDO::exec(), PDO::prepare()
PDO::query() ส่วนใหญ่จะใช้สำหรับการดำเนินการที่ส่งคืนผลลัพธ์ที่บันทึกไว้ โดยเฉพาะการดำเนินการ SELECT
PDO::exec() มีไว้สำหรับการดำเนินการที่ไม่ส่งคืนชุดผลลัพธ์เป็นหลัก เช่น INSERT, UPDATE, DELETE และการดำเนินการอื่น ๆ ผลลัพธ์ที่ส่งคืนคือจำนวนคอลัมน์ที่ได้รับผลกระทบจากการดำเนินการปัจจุบัน
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() ส่วนใหญ่จะใช้สำหรับชุดผลลัพธ์ที่ได้รับผลกระทบจากการดำเนินการ DELETE, INSERT และ UPDATE ของ PDO::query() และ PDO::prepare() และไม่ถูกต้องสำหรับเมธอด PDO::exec() และการดำเนินการ SELECT
★ธุรกรรมและการส่งอัตโนมัติ
ณ จุดนี้ คุณได้เชื่อมต่อกับ mysql ผ่าน PDO แล้ว ก่อนที่จะออกคำสั่ง คุณควรทำความเข้าใจว่า PDO จัดการธุรกรรมอย่างไร หากคุณไม่เคยสัมผัสกับธุรกรรมมาก่อน คุณต้องทราบลักษณะสี่ประการของธุรกรรมก่อน: ความเป็นอะตอมมิก ความสม่ำเสมอ การแยกตัว และความทนทาน นั่นคือกรด ในแง่ของคนธรรมดา สำหรับงานใด ๆ ที่ดำเนินการภายในธุรกรรมแม้ว่าจะดำเนินการเป็นขั้นตอนก็ตาม มีการรับประกันว่างานจะถูกนำไปใช้กับฐานข้อมูลอย่างปลอดภัย และจะไม่ได้รับผลกระทบจากคำขอจากการเชื่อมต่ออื่น ๆ ในขณะที่กำลังส่งงาน . อิทธิพล. งานธุรกรรมสามารถยกเลิกได้โดยอัตโนมัติตามคำขอ (สมมติว่าคุณยังไม่ได้ยืนยัน) ซึ่งทำให้การจัดการข้อผิดพลาดในสคริปต์ง่ายขึ้นมาก
โดยปกติแล้วธุรกรรมจะดำเนินการโดยการสะสมชุดการเปลี่ยนแปลงและทำให้มีผลในเวลาเดียวกัน ข้อดีของสิ่งนี้คือสามารถปรับปรุงประสิทธิภาพของการอัปเดตเหล่านี้ได้อย่างมาก กล่าวอีกนัยหนึ่ง ธุรกรรมสามารถทำให้สคริปต์เร็วขึ้นและมีประสิทธิภาพมากขึ้น (แม้ว่าธุรกรรมจะต้องใช้อย่างถูกต้องเพื่อรับผลประโยชน์ดังกล่าว)
น่าเสียดายที่ไม่ใช่ทุกฐานข้อมูลที่รองรับธุรกรรม (Mysql5 รองรับธุรกรรม, mysql4 ฉันไม่รู้) ดังนั้นเมื่อเปิดการเชื่อมต่อครั้งแรก PDO จำเป็นต้องทำงานในโหมดที่เรียกว่า "กระทำอัตโนมัติ" โหมดส่งอัตโนมัติหมายความว่าหากฐานข้อมูลรองรับธุรกรรม ทุกแบบสอบถามที่คุณเรียกใช้จะมีธุรกรรมโดยนัยเป็นของตัวเอง และหากฐานข้อมูลไม่รองรับธุรกรรม ทุกแบบสอบถามก็ไม่มีธุรกรรมดังกล่าว หากคุณต้องการธุรกรรม คุณต้องใช้เมธอด PDO::beginTransaction() เพื่อเริ่มธุรกรรม หากไดรเวอร์พื้นฐานไม่รองรับธุรกรรม PDOException จะถูกส่งออกไป (โดยไม่คำนึงถึงการตั้งค่าการจัดการข้อผิดพลาด: นี่เป็นเงื่อนไขข้อผิดพลาดร้ายแรงเสมอ) ภายในธุรกรรม คุณสามารถใช้ PDO::commit() หรือ PDO::rollBack() เพื่อสิ้นสุดธุรกรรม ขึ้นอยู่กับว่าโค้ดที่ทำงานในธุรกรรมสำเร็จหรือไม่
เมื่อสคริปต์สิ้นสุด หรือเมื่อการเชื่อมต่อกำลังจะปิด หากมีธุรกรรมคงค้าง PDO จะย้อนกลับธุรกรรมโดยอัตโนมัติ นี่เป็นมาตรการด้านความปลอดภัยเพื่อช่วยหลีกเลี่ยงความไม่สอดคล้องกันหากสคริปต์สิ้นสุดอย่างผิดปกติ - หากธุรกรรมไม่ได้ถูกกระทำอย่างชัดเจน จะถือว่ามีความไม่สอดคล้องกันที่ใดที่หนึ่ง ดังนั้นจะดำเนินการย้อนกลับเพื่อรักษาความปลอดภัยของข้อมูล
// ตัวอย่างจาก http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0505furlong/index.html
พยายาม{
$dbh=new PDO('odbc:SAMPLE','db2inst1','ibmdb2',
อาร์เรย์(PDO_ATTR_PERSISTENT=>จริง));
echo"เชื่อมต่อแล้วn";
$dbh->setAttribute(PDO_ATTR_ERRMODE,PDO_ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$dbh->exec("insert into staff (id, first, Last) ค่า (23, 'Joe', 'Bloggs')");
$dbh->exec("ใส่เข้าไปในการเปลี่ยนแปลงเงินเดือน (id, จำนวน, การเปลี่ยนแปลง)
ค่า (23, 50000, NOW())");
$dbh->กระทำ();
} จับ (ยกเว้น $e){
$dbh->ย้อนกลับ();
echo"ล้มเหลว: ".$e->getMessage();
-
ในตัวอย่างข้างต้น สมมติว่าเราสร้างชุดรายการสำหรับพนักงานใหม่ด้วยหมายเลข ID ซึ่งก็คือ 23 นอกจากการป้อนข้อมูลพื้นฐานของบุคคลแล้ว เรายังต้องบันทึกเงินเดือนของพนักงานด้วย การอัปเดตทั้งสองแยกจากกันเป็นเรื่องง่าย แต่การรวมการอัปเดตทั้งสองในการเรียก beginningTransaction() และ Commit() จะทำให้คุณมั่นใจได้ว่าจะไม่มีใครเห็นการเปลี่ยนแปลงได้จนกว่าการเปลี่ยนแปลงจะเสร็จสมบูรณ์ หากมีข้อผิดพลาดเกิดขึ้น catch block สามารถย้อนกลับการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นตั้งแต่เริ่มต้นธุรกรรมและพิมพ์ข้อความแสดงข้อผิดพลาดออกมา
ไม่จำเป็นต้องทำการอัพเดตภายในธุรกรรม คุณยังสามารถออกคำถามที่ซับซ้อนเพื่อดึงข้อมูลและสร้างการอัปเดตและการสืบค้นเพิ่มเติมโดยใช้ข้อมูลนั้นได้ เมื่อมีการใช้งานธุรกรรม จะรับประกันได้ว่าผู้อื่นจะไม่สามารถทำการเปลี่ยนแปลงได้ในขณะที่งานอยู่ระหว่างดำเนินการ จริงๆ แล้ว นี่ไม่ถูกต้อง 100% แต่เป็นการแนะนำที่ดีหากคุณไม่เคยได้ยินเกี่ยวกับธุรกรรมมาก่อน
★คำสั่งที่เตรียมไว้และขั้นตอนการจัดเก็บ ฐานข้อมูลที่เป็นผู้ใหญ่จำนวนมากสนับสนุนแนวคิดของคำสั่งที่เตรียมไว้ งบที่เตรียมไว้มีอะไรบ้าง? คุณสามารถนึกถึงคำสั่งที่เตรียมไว้เป็นเทมเพลตที่คอมไพล์ของ SQL ที่คุณต้องการรัน ซึ่งสามารถปรับแต่งได้โดยใช้พารามิเตอร์ตัวแปร คำสั่งที่เตรียมไว้ให้ประโยชน์หลักสองประการ:
แบบสอบถามจะต้องแยกวิเคราะห์ (หรือเตรียม) เพียงครั้งเดียว แต่สามารถดำเนินการได้หลายครั้งด้วยพารามิเตอร์เดียวกันหรือต่างกัน เมื่อแบบสอบถามพร้อม ฐานข้อมูลจะวิเคราะห์ คอมไพล์ และปรับแผนสำหรับการดำเนินการค้นหาให้เหมาะสม กระบวนการนี้ใช้เวลานานกว่าสำหรับการสืบค้นที่ซับซ้อน และอาจทำให้แอปพลิเคชันของคุณช้าลงอย่างมาก หากคุณต้องการทำซ้ำการสืบค้นเดียวกันหลายครั้งด้วยพารามิเตอร์ที่แตกต่างกัน ด้วยการใช้คำสั่งที่เตรียมไว้ คุณสามารถหลีกเลี่ยงรอบการวิเคราะห์/คอมไพล์/การปรับให้เหมาะสมซ้ำๆ ได้ พูดง่ายๆ ก็คือ คำสั่งที่เตรียมไว้จะใช้ทรัพยากรน้อยลง ดังนั้นจึงทำงานได้เร็วขึ้น
พารามิเตอร์ที่จัดเตรียมให้กับคำสั่งที่เตรียมไว้ไม่จำเป็นต้องอยู่ในเครื่องหมายคำพูด ไดรเวอร์จะจัดการสิ่งเหล่านี้ หากแอปพลิเคชันของคุณใช้คำสั่งที่เตรียมไว้โดยเฉพาะ คุณจะมั่นใจได้ว่าไม่มีการบุกรุก SQL เกิดขึ้น (อย่างไรก็ตาม ยังคงมีความเสี่ยงหากคุณยังคงยึดส่วนอื่นๆ ของแบบสอบถามโดยใช้อินพุตที่ไม่น่าเชื่อถือ)
ข้อความที่เตรียมไว้มีประโยชน์มากจน PDO ฝ่าฝืนกฎที่ตั้งไว้ในเป้าหมายที่ 4: ถ้าคนขับไม่สนับสนุนข้อความที่เตรียมไว้ PDO จะเลียนแบบข้อความที่เตรียมไว้
ตัวอย่าง: ตัวอย่างแอปพลิเคชัน PDO:
<?php
$dbms='mysql';//ประเภทฐานข้อมูล Oracle ใช้ ODI สำหรับนักพัฒนา การใช้ฐานข้อมูลที่แตกต่างกัน ตราบใดที่คุณเปลี่ยนสิ่งนี้ คุณไม่จำเป็นต้องจำฟังก์ชันมากมาย
$host='localhost';//Database ชื่อโฮสต์
$dbName='test';//ฐานข้อมูลที่ใช้
$user='root';//ชื่อผู้ใช้การเชื่อมต่อฐานข้อมูล
$pass='';//รหัสผ่านที่สอดคล้องกัน
$dsn="$dbms:host=$host;dbname= $dbName";
คลาสdbextendsPDO{
publicfunction__construct(){
พยายาม{
parent::__construct("$GLOBALS[dsn]",$GLOBALS['ผู้ใช้'],$GLOBALS['ผ่าน']);
} จับ (PDOException$e){
die("ข้อผิดพลาด: ".$e->__toString()."<br/>");
-
-
publicfinalfunctionquery ($ sql) {
พยายาม{
returnparent::query($this->setString($sql));
} จับ (PDOException$e){
die("ข้อผิดพลาด: ".$e->__toString()."<br/>");
-
-
privatefinalfunctionsetString($sql){
echo "ฉันต้องการประมวลผล $sql";
กลับ$ sql;
-
}
$db=newdb();
$db->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER);
foreach($db->query('SELECT * from xxxx_menu')as$row){
print_r($แถว);
-
$db->exec('ลบจาก `xxxx_menu` โดยที่ mid=43');
-