最佳创建配置文件(config.php)的方法是什么?(PHP)

9

我正在为我的项目创建一个数据库配置文件,但我不确定我的config.php是否安全。

我应该如何修改这个脚本以进行安全连接?

config.php

<?php
$username="root";
$password="";
$host="localhost";
$database="practise";
?>

Index.php

<?php
include 'config.php';
$con=mysql_connect("$host","$username","$password") or die("Server Error");
mysql_select_db("$database") or die("Database error");

if($con==true)
{
    echo "Success";
}
else
{
    mysql_close($con);
}
?>

除了您使用已被弃用的 mysql_* 而不是 mysqlipdo 之外,没有任何问题。 - pala_
4个回答

15

1)创建一个config.php文件。

define('DBUSER','username');
   define('DBPWD','password');
   define('DBHOST','localhost');
   define('DBNAME','database name');

2) db.php

 <?php
    include('config.php');
    class db extends mysqli {


        // single instance of self shared among all instances
        private static $instance = null;


        // db connection config vars
        private $user = DBUSER;
        private $pass = DBPWD;
        private $dbName = DBNAME;
        private $dbHost = DBHOST;

        //This method must be static, and must return an instance of the object if the object
        //does not already exist.
        public static function getInstance() {
        if (!self::$instance instanceof self) {
                self::$instance = new self;
        }
            return self::$instance;
        }

        // The clone and wakeup methods prevents external instantiation of copies of the Singleton class,
        // thus eliminating the possibility of duplicate objects.
        public function __clone() {
       trigger_error('Clone is not allowed.', E_USER_ERROR);
        }
        public function __wakeup() {
        trigger_error('Deserializing is not allowed.', E_USER_ERROR);
        }

        private function __construct() {
        parent::__construct($this->dbHost, $this->user, $this->pass, $this->dbName);
        if (mysqli_connect_error()) {
            exit('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
        parent::set_charset('utf-8');

       }
       public function dbquery($query)
        {
            if($this->query($query))
            {
                return true;
            }

        }
        public function get_result($query) 
        {
            $result = $this->query($query);
            if ($result->num_rows > 0){
            $row = $result->fetch_assoc();
            return $row;
            } else
            return null;


        }
    }


    ?>

3) 使用

 require 'db.php';
    $query="select * from tbl_session";
    $sockets = db::getInstance()->get_result($query);

或任何其他查询

$query="insert into `tbl_chats` (coloum_name) values('".$val."')";
$wisherID = db::getInstance()->dbquery($query);

7
我发现为我的项目创建config.php文件的最佳方式。
index.php
<?php
include 'config.php';
try
{
    $host=$config['DB_HOST'];
    $dbname=$config['DB_DATABASE'];
$conn= new PDO("mysql:host=$host;dbname=$dbname",$config['DB_USERNAME'],$config['DB_PASSWORD']);
//new PDO("mysql:host=$hostname;dbname=mysql", $username, $password);
}
catch(PDOException $e)
{
    echo "Error:".$e->getMessage();
}
?>

config.php

<?php
$config=array(
'DB_HOST'=>'localhost',
'DB_USERNAME'=>'root',
'DB_PASSWORD'=>'',
'DB_DATABASE'=>'gobinath'
);
?>

1
这不是最好的方式。移除已弃用的mysql_*函数。使用mysqli_*或pdo语句。 - Manoj Dhiman
3
@ris 的回答虽然正确,但与创建和使用配置文件无关。 - pala_
#pala_和_@ris:更新我的index.php是最好的方式吗? - CodeMan

4

我更喜欢使用常量来进行配置选项,而不是变量,原因如下:

  1. 它们是全局的,所以无需将它们作为参数注入到函数中或使用 global 关键字,
  2. 应用程序本身无法更改它们(如果您不小心操作,可能会导致一些尴尬的错误),
  3. 好的编辑器可以提供代码补全并定位到声明常量的行。这使得处理有许多选项的大型项目变得更加容易。这同样适用于全局变量,但是常量更加“干净”(经验法则是尽可能保持全局范围的干净)。

例子:

<?php

const DB_HOST = 'localhost';
const DB_USER = 'user123';
const DB_PASS = '';
const DB_NAME = 'test';

索引:

<?php

require_once 'config.php';

$link = new MySQLi(DB_HOST, DB_USER, DB_PASS, DB_NAME);

0

这是我的config.php的正确方法

<?php
include 'config.php';
try
{
    $host=$config['DB_HOST'];
    $dbname=$config['DB_DATABASE'];
$conn= new PDO("mysql:host=$host;dbname=$dbname",$config['DB_USERNAME'],$config['DB_PASSWORD']);
//new PDO("mysql:host=$hostname;dbname=mysql", $username, $password);
}
catch(PDOException $e)
{
    echo "Error:".$e->getMessage();
}
?>

config.php

<?php
$config=array(
'DB_HOST'=>'localhost',
'DB_USERNAME'=>'root',
'DB_PASSWORD'=>'',
'DB_DATABASE'=>'gobinath'
);
?>

配置文件在哪里?这就是他问的内容。 - Connor Wyatt
@cwyatt1:添加了config.php作为参考。 - CodeMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接