在PHP中通过OOP连接到DB和Activites
嗨,我在使用OO PHP连接数据库时遇到了一些问题。我的剧本在下面。我做这件事已经有一段时间了。这只是一个测试脚本,因为我对OOP还比较陌生。请不要太苛刻在PHP中通过OOP连接到DB和Activites,php,oop,mysqli,this,Php,Oop,Mysqli,This,嗨,我在使用OO PHP连接数据库时遇到了一些问题。我的剧本在下面。我做这件事已经有一段时间了。这只是一个测试脚本,因为我对OOP还比较陌生。请不要太苛刻 class Database{ public $mysqli, $host, $username, $password, $db; public function __construct($host, $username, $password, $db
class Database{
public $mysqli,
$host,
$username,
$password,
$db;
public function __construct($host, $username, $password, $db){
$this->host = $host;
$this->username = $username;
$this->password = $password;
$this->db = $db;
$mysqli = new mysqli($host, $username, $password, $db);
if (!$mysqli){
echo "error in connecting to database";
}
else{
echo "success in connecting to database";
}
}
public function query(){
$result = $mysqli->query("SELECT * FROM inventory");
if ($result) {
printf("Select returned %d rows.\n", $result->num_rows);
$result->close();
}
else{
echo "there is an error in query";
$result->close();
}
//echo "in query function";
}
}
用法
$DB = new Database('localhost', 'root', 'xxxx', 'yyyy');
$DB -> query();
您的主要问题是没有将值存储到类“
$mysqli
属性中。您需要在构造函数和查询方法中使用$this->mysqli
,而不是$mysqli
其次,这个类添加了mysqli类没有的内容。你不妨简单地使用
$DB = new mysqli('localhost', 'root', 'xxxx', 'yyyy');
if ($DB->connect_error) {
throw new Exception($DB->connect_error, $DB->connect_errno);
}
试试这个:
$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
// Test if connection succeeded
if(mysqli_connect_error()){
die("Database connection failed: " .
mysqli_connect_error() .
" (" . mysqli_connect_errno() . ")"
);
}
问题是,您访问类属性时没有
$this
。$mysqli
应该在构造函数中的$this->mysqli
中
您正在使用mysqli属性作为mysqli
类的对象
然后,您可以通过查询功能中的$this->mysqli->query(“从库存中选择*”)
使用mysqli属性对象的查询功能(在数据库类中)
更新代码:
<?php
class Database{
public $mysqli,
$host,
$username,
$password,
$db;
public function __construct($host, $username, $password, $db){
$this->host = $host;
$this->username = $username;
$this->password = $password;
$this->db = $db;
$this->mysqli = new mysqli($host, $username, $password, $db);
/* check connection */
if ($this->mysqli->connect_errno) {
printf("Connect failed: %s\n", $this->mysqli->connect_error);
exit();
} else {
echo "success in connecting to database";
}
}
public function query(){
$result = $this->mysqli->query("SELECT * FROM inventory");
if ($result) {
printf("Select returned %d rows.\n", $result->num_rows);
$result->close();
}
else{
echo "there is an error in query";
$result->close();
}
//echo "in query function";
}
}
$DB = new Database('localhost', 'root', 'xxxx', 'yyyy');
$DB -> query();
这不是程序性的吗?如果你“有一些问题”,你需要在你的问题中添加所有可用的信息。描述问题和症状,否则很难诊断。pdo或mysqli>@user2128444哪个更好完全是主观的。我认为PDO有一个更干净的API,但是有一些MySQL功能只能通过MySQLi使用,因此您可以根据使用连接的方式进行选择。失败的MySQLi
构造函数不会计算为错误的值。您需要检查mysqli::$connect\u error
/mysqli::$connect\u errno