我只是想在构造函数中将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方法,但它没有连接,我在某处读取构造函数中实例化数据库连接是一个坏主意:请你解释原因,以及是否有更好的方法在需要它的每个类中都可以轻松获得数据库连接吗?
答案 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());
};