2016-07-02 119 views
-1

我正在學習面向對象的PHP。現在我的使命是建立聯繫。我想展示我的代碼並要求您提供一些優化支持。也許有幾個絕對錯誤的理解事物。我不希望如此。我想改進我的設計。實際上,常量當然具有權利價值。十分感謝! :)PHP SQL代碼優化

// index.php文件

<?php 
require(dirname(__FILE__) . '/config.php'); 
new db(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE); 
?> 

// config.php文件

<?php 
define('DB_HOST', 'host'); 
define('DB_USER', 'user'); 
define('DB_PASSWORD', 'password'); 
define('DB_DATABASE', 'database'); 

if (!defined('ABSPATH')) 
    define('ABSPATH', dirname(__FILE__) . '/'); 

require_once(ABSPATH . '/includes/classes/db.class.php'); 
?> 

// db.class.php

<?php 
class db 
{ 
    protected $db_host; 
    protected $db_user; 
    protected $db_password; 
    protected $db_name; 

    function __construct($dbHost, $dbUser, $dbPassword, $dbName) 
    { 
     global $mysqli; 

     $this -> db_host  = $dbHost; 
     $this -> db_user  = $dbUser; 
     $this -> db_password = $dbPassword; 
     $this -> db_name  = $dbName; 

     $this -> mysqli = new mysqli($this -> db_host, $this -> db_user, $this -> db_password, $this -> db_name); 
     $mysqli = $this -> mysqli; 
    } 
} 
?> 
+2

您不應該在全部破壞封裝的方法中使用全局變量 – RiggsFolly

+1

這是Code Review .... –

+1

我投票結束這個問題作爲題外話,因爲沒有具體的問題,屬於代碼審查網站。 – Eiko

回答

0

這裏有一些技巧,我發現一段時間後,在數據庫層

定義c onnection作爲一個靜態變量,避免連接不止一次

static $connection; 

嘗試連接到數據庫,如果連接尚未建立,創建連接只有一次

if(!isset($connection)) { 
    // Load configuration as an array. Use the actual location of your configuration file 
    $config = parse_ini_file('../config.ini'); 
    $connection = mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']); 
} 

如果連接不成功,處理錯誤

if($connection === false) { 
    // Handle error - notify administrator, log to a file, show an error screen, etc. 
    return mysqli_connect_error(); 
} 

最後返回連接

return $connection; 

更多信息:https://www.binpress.com/tutorial/using-php-with-mysql-the-right-way/17

0

它看起來像你有一個很好的基本瞭解。就數據庫憑證的配置和硬編碼而言,您可以學習更好的安全實踐。

您可以創建'.conf.ini'文件並將其存儲在包含以下內容的Web目錄中。這樣做可以阻止硬編碼的數據庫憑據顯示在Web根目錄和'。'中。如果我沒有弄錯,在'conf'前面加上前綴將確保首先處理它。以下內容既可以作爲php文件也可以作爲.ini文件接受。

;<?php 
;die(); 

;/* 
[General_Database_Settings] 
SERVER_ADDRESS = server 
DATABASE_NAME = database_name 
TABLE = table_name 
DATABASE_USERNAME = db_username 
DATABASE_PASSWORD = db_password 

;*/ 
;?> 

這將讓你在使用解析設置:

$config = parse_ini_file('/.conf.ini'); 

然後,您可以訪問該變量在配置文件中輕鬆:

$server_address = $config['SERVER_ADDRESS']; 
$database_name = $config['DATABASE_NAME']; 
$username = $config['DATABASE_USERNAME']; 
$password = $config['DATABASE_PASSWORD']; 

使用這種結合PDO (PHP數據對象)在這裏找到PDO Manual將給你一個很好的理解PHP中的面向對象編程以及建立安全的數據庫連接。

我在做同樣的事情,閱讀本文可以幫助我更快地學習一切,並且擁有更好的生產實踐。 (例如,使用預準備語句防止SQL注入。)

+0

感謝您的鏈接和您的做法。我會研究他們:) – ncpsmdt