2012-10-26 34 views
0

我需要創建一個類連接到數據庫。我知道,硬編碼DB信息是壞的,如:需要一個類創建一個數據庫連接php與mysqli

$user = "xxx"; 
$password = "yyy"; 
$server = "zzz"; 
$dbname = "name"; 

mysql_connect($user,$password,$server); 
mysql_select_db($dbname); 

這就是爲什麼我使用「包括」如:

include "config.php" 

它包含了所有需要的變量,然後我可以使用的mysql_connect與他們。但據我所知,這也是一個不好的做法。我怎樣才能使用mysqli類(擴展它?)最簡單的方法,並且當然最安全可能?

感謝您的任何提示

+0

爲什麼硬編碼有安全風險? –

+1

我建議你使用PDO。 PDO爲您提供一個數據庫抽象層和所有訪問數據的類,包括連接。 – slash28cu

回答

0

所有建議的答案可能是正確的我猜,但我的目的和情況,我創建了一個文件其中包括mysqli對象創建和連接到數據庫與一些函數轉義數據。我只是將該文件包含在需要數據庫連接的所有其他.php文件中,並且它非常易於使用和執行查詢。如果有人需要更多信息或例子,請告訴我。

感謝所有

2

在你到底把你的代碼中的連接配置參數。沒關係,如果它是在一個恆定的,一類等...

我不認爲硬編碼這些值的安全風險。你的PHP腳本在服務器中。所以它們也受到文件系統權限和系統權限的保護。 如果有人可以訪問你的文件,安全問題是在服務器中,而不是在PHP腳本。

使用PDO,它有類來處理數據庫訪問。

PDO php manual

PHP的數據對象(PDO)擴展定義的輕量的,一致的 接口在PHP訪問數據庫。

通過創建PDO基類 類的實例來建立連接。

例子#1連接到MySQL

<?php 
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
?> 
+0

如果您從外部來源引用材料,請確保您引用此材料。我編輯了你的問題來說明這應該歸因於什麼。 –

+0

很酷,謝謝 – slash28cu

1

我真的不能回答你的問題,現在, 但作爲小費,觀看這部影片。

這是一個PHP安全系列,可以幫助您有:

https://www.youtube.com/watch?v=Nx-g-0ynP_I

如果它不能在YouTube上的工作搜索PHP的安全第1部分!

希望它有幫助!

1

關於硬編碼數據庫常量(正如其他人所說的,他們必須在某個地方......)沒有什麼可怕的不安全感,儘管像你注意到將這些值放在單獨的文件中是個好主意。我建議更進一步,不要在源代碼控制中跟蹤此文件,而是創建一個模板,例如config.base.php,您將其複製到config.php並配置每個服務器。還有其他的選擇(我工作的地方,我們跟蹤這些文件,但是將它們命名爲$(hostname).php,它允許一些聰明的導入鏈接,但不是必須的),但這是一個簡單而安全的選項,其優點是保持這些值你的版本控制。這允許代碼在沒有提供這些密碼的情況下分發。

更關心自己的安全問題是鎖定前面的MySQL用戶,使其只具有需要web應用程序擁有的權限。例如,對於您的網站而言,一般不宜使用表格,因此通常不要將這些權限授予您的網站使用的用戶,並且擁有與您使用不同的,更高權限的用戶直接使模式更改脫機。

你的問題,我做了一個common.php類下面創建我的MySQLi連接:

require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php'); 
$db = @new mysqli(MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_DB); 
if(mysqli_connect_errno()) 
{ 
    if(DEBUG_MODE) 
     $template->error('Failed To Connect To Database: '.mysqli_connect_errno().': '.mysqli_connect_error()); 
    else 
     $template->error('Failed To Connect To Database. Try reloading the page. If this error persists, <a href="/contact.php">let me know</a>.'); 
} 
相關問題