2016-07-02 69 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