ความแตกต่างระหว่าง MySQL, MySQLi และ PDO คืออะไร? [ปิด]


128

ความแตกต่างระหว่าง MySQL, MySQLiและPDOคืออะไร?

อันไหนที่เหมาะที่สุดที่จะใช้กับ PHP-MySQL?

คำตอบ:


100

มีมากกว่าสามวิธีที่นิยมใช้ MySQL จาก PHP นี่เป็นการสรุปคุณสมบัติ / ความแตกต่างของPHP: การเลือก API :

  1. ( เลิกใช้งาน ) ฟังก์ชั่น mysqlเป็นขั้นตอนและใช้การหลบหลีกด้วยตนเอง
  2. MySQLiคือการแทนที่ฟังก์ชั่น mysql ด้วยรุ่นเชิงวัตถุและขั้นตอน มีการสนับสนุนงบเตรียม
  3. PDO (PHP Data Objects) เป็นเลเยอร์นามธรรมที่เป็นนามธรรมโดยรองรับ MySQL ในฐานข้อมูลอื่น ๆ จัดเตรียมข้อความสั่งที่เตรียมไว้และความยืดหยุ่นที่สำคัญในการคืนข้อมูล

ฉันอยากจะแนะนำการใช้ PDO พร้อมงบเตรียม มันเป็น API ที่ออกแบบมาอย่างดีและจะช่วยให้คุณย้ายไปยังฐานข้อมูลอื่นได้ง่ายขึ้น (รวมถึงสิ่งที่รองรับODBC ) หากจำเป็น


9
มักจะมีความสับสนว่าสำหรับขั้นตอนคุณต้องใช้ mysql _ * () ฟังก์ชั่นที่ OO คุณใช้ mysqli! ความจริงก็คือว่า mysqli แทนที่การใช้ mysql ในช่วงต้น (PHP 4) อย่างสมบูรณ์ มันเป็นไปได้ที่จะใช้ทั้งรูปแบบขั้นตอนและ OO หนึ่งกับ mysqli
Patrick Allaert

@ แพทริกขอบคุณ ฉันแก้ไขสิ่งนี้แล้ว
Matthew Flaschen

46

นั่นคือ APIs ที่แตกต่างกันในการเข้าถึง MySQL แบ็กเอนด์

  • MySQLเป็น API ประวัติศาสตร์
  • mysqliเป็นรุ่นใหม่ของ API ประวัติศาสตร์ ควรทำงานได้ดีขึ้นและมีชุดฟังก์ชั่นที่ดีขึ้น นอกจากนี้ API ยังเป็นวัตถุ
  • PDO_MySQLเป็น MySQL สำหรับ PDO PDO ได้รับการแนะนำใน PHP และโครงการมีวัตถุประสงค์เพื่อสร้าง API ทั่วไปสำหรับการเข้าถึงฐานข้อมูลทั้งหมดดังนั้นในทางทฤษฎีคุณควรจะสามารถโยกย้ายระหว่าง RDMS โดยไม่ต้องเปลี่ยนรหัสใด ๆ (ถ้าคุณไม่ใช้ฟังก์ชัน RDBM เฉพาะในแบบสอบถามของคุณ ) นอกจากนี้ยังมุ่งเน้นวัตถุ

ดังนั้นมันขึ้นอยู่กับว่าคุณต้องการสร้างโค้ดประเภทใด หากคุณต้องการเลเยอร์เชิงวัตถุหรือฟังก์ชั่นธรรมดา ...

คำแนะนำของฉันจะเป็น

  1. PDO
  2. MySQLi
  3. MySQL

นอกจากนี้ยังมีความรู้สึกของฉัน, MySQL API PHPจะอาจจะถูกลบในอนาคตของ


3
มันไม่มีความรู้สึกอีกต่อไป: PHP7 ลบ mysql API ออกจาก PDO และ mysqli
Manuel

3

mysqliเป็นรุ่นปรับปรุงของ mysql

ส่วนขยาย PDOกำหนดอินเทอร์เฟซน้ำหนักเบาและสอดคล้องกันสำหรับการเข้าถึงฐานข้อมูลใน PHP ไดรเวอร์ฐานข้อมูลแต่ละตัวที่ใช้อินเทอร์เฟซ PDO สามารถเปิดเผยคุณสมบัติเฉพาะฐานข้อมูลเป็นฟังก์ชันส่วนขยายปกติ


4
การคัดลอกจากไฟล์คู่มือนั้นไม่มีประโยชน์มากนัก
XuDing

3

โดยเฉพาะอย่างยิ่งส่วนขยาย MySQLi ให้ประโยชน์ที่มีประโยชน์อย่างยิ่งต่อไปนี้ส่วนขยาย MySQL เก่า ..

ส่วนต่อประสาน OOP (นอกเหนือจากขั้นตอน) การทำรายการสนับสนุนคำสั่งที่เตรียมไว้ + ขั้นตอนการจัดเก็บข้อมูลสนับสนุนการปรับปรุงความเร็วไวยากรณ์ดีกว่าการดีบั๊ก

นามสกุล PDO

PHP Data Objects extension เป็น Database Abstraction Layer โดยเฉพาะนี่ไม่ใช่อินเทอร์เฟซ MySQL เนื่องจากมีไดรเวอร์สำหรับเอ็นจิ้นฐานข้อมูลจำนวนมาก (แน่นอนรวมถึง MYSQL)

PDO มุ่งหวังที่จะให้ API ที่สอดคล้องกันซึ่งหมายความว่าเมื่อมีการเปลี่ยนแปลงเอ็นจิ้นฐานข้อมูลการเปลี่ยนรหัสเพื่อสะท้อนสิ่งนี้ควรมีน้อยที่สุด เมื่อใช้ PDO ปกติรหัสของคุณจะ "ทำงานได้" กับเครื่องมือฐานข้อมูลหลายตัวเพียงแค่เปลี่ยนไดรเวอร์ที่คุณใช้

นอกเหนือจากการเข้ากันได้กับฐานข้อมูลข้ามแล้ว PDO ยังรองรับงบที่เตรียมไว้ขั้นตอนการจัดเก็บและอื่น ๆ อีกมากมายขณะที่ใช้ไดรเวอร์ MySQL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.