簡體   English   中英

切換到mysqli一個好主意?

[英]switch to mysqli a good idea?

我正在考慮為我所有的php項目切換到mysqli。 我的代碼編寫方式(我運行非常簡單的網站並構建我自己的基本框架,我在其中使用所有這些)我不應該在修改函數和類時遇到太多問題。

但是,我只聽到關於准備好的語句的積極的事情,關於可用的php函數的一些抱怨,最值得注意的是缺少一段時間使用mysql_fetch_array的簡單替代。

這聽起來有點太好了,所以我想知道是否有人可以強調使用預准備語句的一些問題,例如速度和資源使用。

如果您習慣於將變量附加到查詢字符串,那么對預准備語句進行編程需要一些時間來習慣。 MySQL使用位置參數(您的查詢將包含替換變量所屬的問號)。 最好的辦法是將它放入現有的數據庫抽象中。 如果正確編寫了抽象,那么你不應該在包裝器之外調用mysql_fetch_array。

這個問題的解決方案只是提前收集所有行,但當然假設您沒有檢索1000行而只是要求第一行。 無論mysqli如何,這都是您應該做出的改變。

最后,一些語句不容易被參數替換,例如使用帶有可變數量參數的in('x', 'y', 'z')語法的查詢。 它可以完成,但您可能希望豐富數據庫抽象,以允許它創建查詢以及執行它們。

然而,在性能和安全性方面,這種權衡無疑是值得的。 PHP端的額外處理通常被MySQL端查詢的緩存執行計划所抵消,並且您不受許多最常見的SQL注入漏洞的影響。

希望有所幫助,喬

准備好的語句非常好,一旦你習慣了它們,再次使用轉義函數是很痛苦的 期。

但是,我曾經使用過的所有DB庫(包括oci8和sqlsrv ......)都引入了一個奇怪或者另一個。 所以我基本上使用一組簡單的自定義類來封裝我使用的庫,這些自定義類以喜歡的方式提供功能:

  • 基於名稱的參數: WHERE foo = :foo
  • 在關聯數組中通過值傳遞的參數(而不是綁定到單個PHP變量): $params = array('foo' => 33)
  • 一行執行: $res = $Db->query($sql, $params);
  • Resultsets是實現Iterator接口的對象,因此我可以使用foreach($res as $row)循環foreach($res as $row)

采用這樣的策略使得確切的語法或功能集不那么重要。

無論如何,雖然這可以通過幾乎任何庫來實現,但如果它提供本機參數綁定(例如),則無需猜測數據類型。 此外,某些高級功能(如事務)不能簡單地使用普通的mysql函數完成。

PDO可能是一個不錯的選擇,但它的大多數驅動程序基本上都被放棄了,所以當你享受陷阱時,你實際上已經失去了擁有DB不可知抽象層的好處。

恕我直言,你要問的事實表明你應該給mysqli一個機會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM