2016-07-02 8 views
-1

私はオブジェクト指向のPHPを学んでいます。今私はつながりを得るという使命を持っています。私は自分のコードを表示して、最適化のサポートをお願いします。たぶん間違って理解されたものがいくつかあるかもしれません。私はそう望んでいない。私は自分のデザインを改善したい。実際にはConstantsには権利値があります。本当にありがとう! :)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

私が見つけたいくつかのヒントを紹介しますいくつかの時間が戻って、DB層で

定義するc

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']); 
} 

を接続を作成するには、静的変数としてonnection、成功し、エラーを処理

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

は最後に接続

を返します

さらに詳しい情報: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 Data Objects)ここにあるPDO Manualは、PHPでのオブジェクト指向プログラミングの理解と、安全なデータベース接続の確立に大きな助けとなるでしょう。

私は同じことをしていましたが、これを読んで私はより良い生産慣行ですべてをより早く学ぶことができました。 (たとえば、プリペアドステートメントを使用したSQLインジェクションを防ぐ)

+0

リンクと実践をありがとう。私はそれらを勉強します:) – ncpsmdt