PHP kullanırken MySQL ve MySQLi [kapalı]


167

Hangisi daha iyi, MySQL veya MySQLi? Ve neden? Hangisini kullanmalıyım?

Sadece performans açısından değil, diğer ilgili özelliklerden de daha iyi demek istiyorum.

Yanıtlar:


111

MySQL Geliştirilmiş Uzantıya Genel Bakış'a bakarsanız , ikisi arasındaki farklar hakkında bilmeniz gereken her şeyi size bildirmelidir.

Ana kullanışlı özellikler şunlardır:

  • Nesne yönelimli bir arayüz
  • hazırlanmış beyanlar için destek
  • çoklu ifadeler için destek
  • işlemler için destek
  • gelişmiş hata ayıklama özellikleri
  • katıştırılmış sunucu desteği.

1
evet, en iyi şey mysqli hazırlanan ifadeleri destekliyor
jondinham

7
Ayrıca, MySQLi'nin yalnızca MySQL 5+ ile çalıştığı da unutulmamalıdır. Bu artık gerçekten alakalı değil, ancak MySQLi ortaya çıktığında, MySQL 4 hala standarttı. Bu, uzantıların ayrı olmasının nedenidir, eski MySQL sürücüsü uyumluluk amacıyla orada kalır.
Ocak'ta zneak

6
Altı yıl içinde her şeyin çok değiştiğini belirtmek gerekir. mysql_*()artık kullanımdan kaldırıldı ve yakında kaldırılacak . Yeni kod için kullanmamalısınız.

Daha az CPU ve RAM ile hangisini seçmeliyiz?
Mehdi Jazini

1
Aşağıdaki Gordon'un cevabına bakınız. Eski mysql uzantısı artık desteklenmediği için mysqli uzantısını kullanmanız daha iyi olacaktır.
Mark Davidson

70

Mysql, mysqli ve PDO arasında seçim yapmaya yardımcı olmak için ayrılmış bir manuel sayfa var

PHP ekibi yeni geliştirme için mysqli veya PDO_MySQL'i önerir:

Mysqli veya PDO_MySQL uzantılarının kullanılması önerilir. Yeni geliştirme için eski mysql uzantısını kullanmanız önerilmez. Ayrıntılı bir özellik karşılaştırma matrisi aşağıda verilmiştir. Her üç uzantının genel performansının yaklaşık olarak aynı olduğu düşünülmektedir. Eklentinin performansı, bir PHP web isteğinin toplam çalışma süresinin yalnızca bir kısmına katkıda bulunur. Genellikle, etki% 0.1 kadar düşüktür.

Sayfa ayrıca, uzantı API'larını karşılaştıran bir özellik matrisine sahiptir. MySQL ve MySQL API arasındaki temel farklar şunlardır:

                               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

Adresindeki kütüphaneleri (yeni mysqlnd ve libmysql'e karşı) karşılaştıran ek bir özellik matrisi vardır.

ve çok kapsamlı bir blog makalesi


15

MySQLi kullanarak terk ettim. Çok dengesiz. Ben mysqli kullanarak PHP çökmesini sorguları vardı ama mysql paketi ile gayet iyi çalışır. Ayrıca Mysqli LONGTEXT sütunlarında çöküyor . Bu hata en az 2005'ten bu yana çeşitli şekillerde ortaya çıkmıştır ve kırılmıştır . Dürüst olmak gerekirse hazırlanan ifadeleri kullanmak istiyorum ama mysqli sadece yeterince güvenilir değil (ve kimse bunu düzeltmek için rahatsız görünüyor). Gerçekten hazırlanmış ifadeler istiyorsanız PDO ile gidin.


2
PDO da tam olarak mükemmel değil (onunla bazı kötü coredumps için koştum), ama en azından daha geniş bir kullanıcı tabanına sahip, bu yüzden muhtemelen daha güvenli bir bahis.
troelskn

@troelskn, normal mysql daha iyi değil mi?
Pacerier

@Pacerier Kullanımdan kaldırıldığı düşünüldüğünde hayır diyebilirim. Genel olarak, PDO standart bir seçim haline gelmiş gibi görünüyor.
troelskn

@troelskn, ancak kullanımdan kaldırılmış olması, gelecekteki sürümlerde orada olmayacağı dışında hiçbir şey ifade etmiyor. Kararlılık açısından, normal mysql daha kararlı değil mi?
Pacerier

1
Bu noktada (5.5) PHP kullanırsanız aktif olarak uyarı gönderir
troelskn

13

MySQLi geliştirilmiş MySQL anlamına gelir. MySQL bağlamaları için nesnelerin kullanımını kolaylaştıran bir nesne yönelimli arayüz. Ayrıca hazırlanmış ifadeler için destek sunar ( çok faydalıdır). PHP 5 kullanıyorsanız MySQLi kullanın.


5

Daha iyi olan PDO'dur; daha az kaba bir arayüz ve aynı zamanda MySQLi ile aynı özellikleri sunar.

Hazırlanan ifadelerin kullanılması iyidir çünkü SQL enjeksiyon olasılıklarını ortadan kaldırır; sunucu tarafında hazırlanmış ifadelerin kullanılması kötüdür, çünkü gidiş-dönüş sayısını arttırır.


3

benim için hazırlanmış ifadeler olmazsa olmaz bir özellik. daha doğrusu, parametre bağlanması (sadece hazırlanmış ifadeler üzerinde çalışır). SQL komutlarına dize eklemenin tek gerçekten akıllıca yolu budur. gerçekten 'kaçan' işlevlere güvenmiyorum. DB bağlantısı bir ikili protokol, neden parametreler için ASCII sınırlı bir alt protokol kullanalım?


1
PDO genellikle istemci tarafında hazırlanmış ifadeler kullanır, bu nedenle sunucuda gerçekten hazırlanmazlar - ancak sunucu kaynaklarını koruduğu ve genellikle daha iyi performans gösterdiği için bu iyidir. Hazırlanan "öykünme" ifadesi her zaman doğru şekilde kaçacaktır.
MarkR

1
"her zaman" ve "kaçmak" bir araya geldiğinde tehlikeli kelimelerdir. bilmiyorum, belki bu kod tamamen hatasız; ama neden gerçek bir ikili protokol mevcut olduğunda rahatsız edelim? performans açısından, bu kıyaslamaya açıktır.
Javier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.