如何在构造函数中将mysql转换为mysqli数据库连接

时间:2014-06-18 04:22:05

标签: php mysql mysqli

我只是想在构造函数中将mysql转换为mysqli数据库连接。

db.php中

<?php
define('SERVER', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', 'password');
define('DATABASE', 'database');
class DB {
    function __construct(){
        $connection = mysqli_connect(SERVER, USERNAME, PASSWORD,DATABASE);
    }
}
?>

users.php

<?php
class Users {
    function __construct(){
        $db = new DB();
    }

    public function read(){
        $query = mysqli_query($db,"select use_id, use_name, use_email FROM users");
        while ($row = mysqli_fetch_array($query,MYSQLI_ASSOC)){
            $data[] = $row;
        }
        return $data;
    }
}
?>

result.php

<?php require_once('db.php'); ?>
<?php require_once('users.php'); ?>
<?php
$Users = new Users();
$users = $Users->read();
?>

我尝试将mysql更改为mysqli方法,但它没有连接,我在某处读取构造函数中实例化数据库连接是一个坏主意:请你解释原因,以及是否有更好的方法在需要它的每个类中都可以轻松获得数据库连接吗?

3 个答案:

答案 0 :(得分:0)

更好的做法是将DB实例传递给Users类。想象一下,你有一个Registration类,一个Login类等。它们的所有构造函数都会创建一个新的MySQL连接吗?它看起来不是一个好主意,因为它们都可以使用相同的数据库连接。

class Users {

    private $db;

    public function __construct($db) {
        $this->db = $db;
    }

....
}

$db = new DB();
$users = new Users($db);

答案 1 :(得分:0)

<?php
define('SERVER', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', '');
define('DATABASE', 'wall');
 $db = mysqli_connect(SERVER, USERNAME, PASSWORD,DATABASE);


class Users {
   private $db;

    public function __construct($db) {
        $this->db = $db;
    }

    public function read(){
        $query = mysqli_query($this->db,"select * FROM users");
        while ($row = mysqli_fetch_array($query,MYSQLI_ASSOC)){
            $data[] = $row;
        }
        return $data;
    }
}

//$db = new DB();
$U = new Users($db);
$users = $U->read();

 foreach($users as $user){
        echo $user['username'] ;
    }

?>

答案 2 :(得分:-2)

the manual mysqli_connect中所述,接受第4个参数作为数据库。尝试

$connection = mysqli_connect(SERVER, USERNAME, PASSWORD, DATABASE);
if (!$connection) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
};