2012-06-14 92 views
8

近日PHP手冊開始呈現出每一個MySQL的功能頁面上以下警告:PHP是否放棄了MySQL擴展?

這個擴展的使用氣餒。相反,應該使用MySQLi或 PDO_MySQL擴展。另請參見MySQL的:選擇一個API 指南和相關FAQ以獲取更多信息......曾經是非常錯誤

MySQLi的,但他們改進它,使它終於對得起它的名字的?這就是爲什麼他們放棄MySQL擴展並試圖讓人們使用MySQLi嗎?

其實,我想用MySQLi,如果它不是越野車了。它具有更多的功能和麪向對象。

對此的評論?

//編輯:我想知道的是,如果可以使用MySQLi。或者它仍然是越野車?我應該用PDO去嗎?

+4

*「MySQLi以前是非常麻煩」* - 你是什麼意思? – hakre

+0

我編輯了我的答案以解決您的編輯問題。 – Flavius

回答

2

是的,您可以使用MySQLi並且您寫的是真實的,API允許從MySQL API輕鬆更改。

對於新項目則建議不使用轉/ MySQL的任何更長的時間,但使用轉/庫MySQLiPDO_MYSQL

因爲在2009年你還沒有寫過什麼bug,所以很難說這些bug是否已經消失。我會這樣認爲,但是,檢查一下自己。

您可能還需要使用轉/庫MySQLiMySQL的本地驅動程序,而不是MySQL客戶端服務器庫(的libmysql)

+0

謝謝你的回答。有什麼理由更喜歡MySQL本地驅動程序? –

+1

看看這裏:http://blog.ulf-wendel.de/?p=157 - 它有更好的內存管理,例如,但這只是一個原因。您可以將它與mysqli或PDO一起使用。 – hakre

9

是的。自(非常)很長。我們現在有了mysqli,或者更好的PDO。

我不會把自己鎖在mysqli中,我更喜歡PDO。除了從一個數據庫系統到另一個數據庫系統提供的更簡單的遷移之外,它還提供更好的錯誤處理。

我想知道的是如果可以使用MySQLi。或者它仍然是越野車?

MySQLi本身是相當無bug的,它用於生產。

我應該用PDO嗎?

如果你唯一使用mysqli的參數是它與mysql的相似性,那麼你可能不會使用mysqli來發揮它的全部潛能。如果你想充分發揮mysqli的潛力,那麼你必須開始「重新學習」(學習知識並不多,你知道)。如果你開始從「scratch」開始學習一些新的工具,那麼爲什麼不首先學習更好的選擇 - PDO?

另一方面,PDO也不完美。使用PDO,您無法訪問MySQL特定的API(例如構建後的set_charset,infile設置,異步查詢,來自準備語句的OUT參數)。另外,如果你需要他們,你應該把它設置爲做準備好的陳述。

+0

我在2009年試過了MySQLi,它不能正常工作。從那以後,我一直在使用默認的MySQL擴展,並且一直沒有問題。您是否因爲某種原因而寧願使用MySQLi進行PDO?我寧願MySQLi,因爲它與MySQL相似。 –

+1

我想我在回答中提到了爲什麼「PDO over MySQLi」。 MySQLi代碼往往會使代碼更加臃腫,超出了它的需求 - 從我的經驗來看,由於錯誤處理的尷尬。如果這對你來說不是問題,那麼使用MySQLi。但我強烈建議你先測試一下,看看更優雅。 – Flavius

+0

如果你使用mysqli的唯一參數是與mysql的相似性,那麼你可能不會使用mysqli來充分發揮它的潛力。如果你想充分發揮mysqli的潛力,那麼你必須重新開始學習。如果你從頭開始,那麼爲什麼不學習更好的選擇 - PDO? – Flavius

3

PHP MySQLi是一個MySQL改進的擴展。

mysqli擴展允許您訪問MySQL 4.1及更高版本提供的功能。

您可以在The MySQLi Extension Function Summary處比較兩者。


如果你正在尋找一個面向未來的解決方案,面向對象,要走的路是PHP PDO

PHP數據對象(PDO)擴展定義了一個用於訪問PHP中的數據庫的輕量級一致接口。每個實現PDO接口的數據庫驅動程序都可以將數據庫特定的功能作爲常規擴展功能公開。

...

PDO提供一個數據訪問抽象層,這意味着,你正在使用無論哪個數據庫,您可以使用相同的功能發出查詢和獲取數據。

1

這是關於時間。 API雖然易於使用,但存在許多問題。可以說最糟糕的問題是完全缺乏對準備語句的支持,這迫使您通過字符串操作將SQL的各個部分拼湊在一起。這不僅是緩慢的,而且也是SQL注入漏洞的主要來源。

PDO比MySQLi的優勢之一是,當您決定在未來的項目中使用不同的DBMS時,您會發現不必學習新的API。