2012-09-18 31 views
3

我知道這聽起來確實很愚蠢,但我發現mysqli準備好的語句和麪向對象的方法很有吸引力,所以我打算將我過去的一些塗鴉從mysql轉換爲mysqli。PHP5 mysqli vs mysql的配置文件

這是...的問題

在MySQL中我曾經有一個配置文件,例如包含在每個需要的數據庫(即require('sys/dbconfig.php');

我的文件不知道是否需要在mysqli中執行此操作,或者如其他人所說的那樣執行此操作時,在需要時打開連接,在不需要時關閉它(即在需要數據庫事務處理時將其關閉)

回答

1

我那樣做:

的config.php

define("DB_HOST", "127.0.0.1"); 
define("DB_NAME", "demo"); 
define("DB_USER", "root"); 
define("DB_PASS", "root"); 

database.php中

// include database constants 
include_once("config.php");     

// create db connection 
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);   

現在你可以通過

$result = $db->query("SELECT x FROM y;");    
+0

順便說一句,這是一個非常簡單的類/方法的例子... – Sliq

+0

哦,好主意:P這正是我所猜測的,有全局常量定義在配置和開放/關閉連接到處,你需要它:)是正確的? –

+0

在這種情況下,我會在腳本/應用程序的開頭創建$ db,並使用$ db,無論您需要它。 PHP會每次使用相同的數據庫連接($ db是ONE連接)..(或者我誤解了你的問題?) – Sliq

0

MySqlI進來2種口味:程序面向對象

當您使用程序款式應有盡有停留在相同mysqli_。 你指的是面向對象風格,那裏的配置是不同的..實際上更多的面向對象。這意味着你必須創建一個mysqli的新實例並使用它的方法來完成工作。

注意:使用mysqli_的方式與mysql相同時,您將遇到與SQL注入相同的問題。您應該將mysqli與準備好的查詢和參數綁定結合使用。

+0

那麼,我應該像過去一樣做一些配置文件,或者我需要時打開連接,當我不需要時關閉它? –

+0

如果你想使用程序風格:是的。看到我關於SQL注入的警告! – JvdBerg

+0

是的我的意思是我期待preparedStatements;)我一直在使用mysql_real_escape_string像瘋了一樣,我覺得很不方便。那麼我怎麼能用mysqli做到這一點呢?當我需要時打開連接並在完成時關閉它?丟棄配置文件並將連接代碼添加到應用程序級別? –

0

mysqli的打開讓SQL語句它是什麼時候的連接用new mysqli(...)實例化(PDO也是如此)。

在PHP會話期間,您不需要打開/關閉連接到數據庫,因爲PHP會話(對於常規網站/ webapps)的持續時間少於1秒。

在代碼中多次強制使用等效的mysql_connect/mysql_close,只有在長時間運行的腳本中,它們在整個持續時間內不需要活動連接。

根據您服務器的配置,每個mysql用戶允許的單獨mysql連接的數量是有限的。

如果您有一些運行很長時間的腳本,並且可能會與其他許多腳本相交,則可以使用每個用戶的所有允許連接,從而阻止其他用戶。

我建議(作爲一種簡單的方法)來實例化一個文件中的mysqli,你將包括無處不在,你需要DB訪問使用你存儲的mysqli對象無處不在,你需要使用global $db變量。

0

我傾向於在像Panique那樣的配置文件中創建常量。

我還使用包含連接代碼的靜態方法fetch_db創建App類。然後,每當我需要一個數據庫連接,我只需撥打App::fetch_db()

我可以在今天下午晚些時候發佈代碼和更多的解釋,當我回家。