ไหนดีกว่ากัน MySQL หรือ MySQLi และทำไม? ฉันควรใช้แบบไหน
ฉันหมายถึงดีกว่าไม่เพียง แต่ในแง่ของประสิทธิภาพ แต่คุณสมบัติอื่น ๆ ที่เกี่ยวข้อง
ไหนดีกว่ากัน MySQL หรือ MySQLi และทำไม? ฉันควรใช้แบบไหน
ฉันหมายถึงดีกว่าไม่เพียง แต่ในแง่ของประสิทธิภาพ แต่คุณสมบัติอื่น ๆ ที่เกี่ยวข้อง
คำตอบ:
หากคุณดูที่MySQL ภาพรวมส่วนต่อขยายที่ปรับปรุงแล้วมันควรบอกทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับความแตกต่างระหว่างทั้งสอง
คุณสมบัติที่มีประโยชน์หลักคือ:
mysql_*()
เลิกใช้แล้วและจะถูกลบในไม่ช้า คุณไม่ควรใช้มันสำหรับรหัสใหม่
มีหน้าคู่มือที่อุทิศตนเพื่อช่วยในการเลือกระหว่าง mysql, mysqli และ PDO ที่
ทีมงาน PHP แนะนำ mysqli หรือ PDO_MySQL สำหรับการพัฒนาใหม่:
ขอแนะนำให้ใช้นามสกุล mysqli หรือ PDO_MySQL ไม่แนะนำให้ใช้นามสกุล mysql เก่าสำหรับการพัฒนาใหม่ เมทริกซ์การเปรียบเทียบคุณสมบัติแบบละเอียดมีให้ด้านล่าง ประสิทธิภาพโดยรวมของส่วนขยายทั้งสามนั้นถือว่าใกล้เคียงกัน แม้ว่าประสิทธิภาพของส่วนขยายนั้นจะมีเพียงเศษเสี้ยวของเวลาทำงานทั้งหมดของการร้องขอเว็บ PHP บ่อยครั้งที่ผลกระทบต่ำถึง 0.1%
หน้านี้ยังมีคุณสมบัติเมทริกซ์เปรียบเทียบ API ส่วนขยาย ความแตกต่างที่สำคัญระหว่าง mysqli และ mysql API มีดังนี้:
mysqli mysql
Development Status Active Maintenance only
Lifecycle Active Long Term Deprecation Announced*
Recommended Yes No
OOP API Yes No
Asynchronous Queries Yes No
Server-Side Prep. Statements Yes No
Stored Procedures Yes No
Multiple Statements Yes No
Transactions Yes No
MySQL 5.1+ functionality Yes No
* http://news.php.net/php.internals/53799
มีเมทริกคุณลักษณะเพิ่มเติมเพิ่มเติมเปรียบเทียบไลบรารี (mysqlnd ใหม่กับ libmysql) ที่
และบทความบล็อกที่ละเอียดมากที่
ฉันได้ละทิ้งการใช้ mysqli มันไม่เสถียรเกินไป ฉันเคยมีคำถามที่ผิดพลาด PHP โดยใช้ mysqli แต่ทำงานได้ดีกับแพ็คเกจ mysql นอกจากนี้ยังmysqli เกิดปัญหาในคอลัมน์ ข้อผิดพลาดนี้ได้รับการเลี้ยงดูในรูปแบบต่าง ๆ อย่างน้อยตั้งแต่ 2005 และยังคงเสีย ฉันสุจริตต้องการใช้งบเตรียม แต่ mysqli เพียงไม่น่าเชื่อถือเพียงพอ (และดูเหมือนว่าไม่มีใครสนใจแก้ไข) ถ้าคุณต้องการงบเตรียมไปด้วย PDO
MySQLi ย่อมาจากการปรับปรุง MySQL มันเป็นอินเทอร์เฟซเชิงวัตถุในการผูก MySQL ซึ่งทำให้การใช้งานง่ายขึ้น นอกจากนี้ยังมีการสนับสนุนงบเตรียม (ซึ่งมีประโยชน์มาก ) ถ้าคุณใช้ PHP 5 ให้ใช้ MySQLi
สิ่งที่ดีกว่าคือ PDO มันเป็นอินเทอร์เฟซที่ crufty น้อยกว่าและยังมีคุณสมบัติเช่นเดียวกับ MySQLi
การใช้ข้อความที่เตรียมไว้เป็นสิ่งที่ดีเพราะช่วยลดโอกาสในการฉีด SQL การใช้คำสั่งที่เตรียมไว้ฝั่งเซิร์ฟเวอร์นั้นไม่ดีเนื่องจากเพิ่มจำนวนรอบการเดินทาง
สำหรับฉันงบที่เตรียมไว้เป็นคุณสมบัติที่ต้องมี ยิ่งไปกว่านั้นการเชื่อมพารามิเตอร์ (ซึ่งใช้ได้กับคำสั่งที่เตรียมไว้) เท่านั้น เป็นวิธีเดียวที่มีเหตุผลจริงๆในการแทรกสตริงลงในคำสั่ง SQL ฉันไม่เชื่อในฟังก์ชั่น 'escaping' จริงๆ การเชื่อมต่อฐานข้อมูลเป็นโปรโตคอลเลขฐานสองทำไมต้องใช้โปรโตคอลย่อยแบบ จำกัด ASCII สำหรับพารามิเตอร์