![](/img/trans.png)
[英]Automatically define username and password for mysqli depending on server type. Good idea?
[英]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
$params = array('foo' => 33)
$res = $Db->query($sql, $params);
foreach($res as $row)
循環foreach($res as $row)
采用這樣的策略使得確切的語法或功能集不那么重要。
無論如何,雖然這可以通過幾乎任何庫來實現,但如果它提供本機參數綁定(例如),則無需猜測數據類型。 此外,某些高級功能(如事務)不能簡單地使用普通的mysql函數完成。
PDO可能是一個不錯的選擇,但它的大多數驅動程序基本上都被放棄了,所以當你享受陷阱時,你實際上已經失去了擁有DB不可知抽象層的好處。
恕我直言,你要問的事實表明你應該給mysqli一個機會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.