我正在为我的php项目编写一个查询类,但我遇到了一个问题,该查询没有从我的数据库返回任何值。
PHP代码:
<?php
class DatabaseConnect{
protected $host = 'localhost';
protected $user = 'root';
protected $pass = 'root';
protected $db = 'test';
public function __construct(){
$con = mysqli_connect($this->host, $this->user, $this->pass, $this->db) or die('Cannot Connect to DB');
return $con;
}
}
class ExecuteQuery{
public $connection;
public $result;
public function __construct(){
$this->connection = new DatabaseConnect();
}
public function getQueryAction($sql){
$this->result = mysqli_query($this->connection, $sql);
}
public function setStringAction($string){
$file = file_get_contents('queryFile.json');
$json = json_decode($file, true);
foreach($json['Queries'] as $this->result){
return $this->result[$string];
}
}
}
$execute = new ExecuteQuery();
Jason文件("它将包含所有查询"):
{
"Queries": [
{"query1":"SELECT * FROM tbl_user"},
{"query2":"SELECT * FROM tbl_users WHERE status=1"}
]
}
索引文件:
<?php
require_once('query.php');
?>
<html>
<head>
<title>
</title>
</head>
<body>
<h1>Welcome</h1>
<h3><?php
$execute->getQueryAction($execute->setStringAction('query1'));
foreach($execute->result as $item){
echo $item['id']. ' ' . $item['user_name'] .'<br />';
}
?></h3>
</body>
</html>
所以我所做的是创建一个类来处理jason文件提取查询,然后创建一个运行查询的类。我提到的Jason文件保存了所有的查询,在索引和任何包含query.php的文件中,我都可以像这样运行所有的查询:
$execute->getQueryAction($execute->setStringAction('query name'));
经过一些调试,我意识到getQueryAction方法中的代码失败了,我认为mysqli_query不喜欢$this->连接。
我的问题是:
为什么以及如何修复
构造函数不能返回任何内容,构造函数的唯一目的是创建类的实例
private $con;
public function __construct(){
$this->con = mysqli_connect($this->host, $this->user, $this->pass, $this->db)
or die('Cannot Connect to DB');
}
public function get_connection(){
return $this->con;
}
所以在ExecuteQuery
类中,您可以执行以下操作:
public function __construct(){
$db = new DatabaseConnect();
$this->connection = $db->get_connection();
}
mysqli->query
不返回结果。它只返回一个可以用来请求结果的句柄。查找mysqli->fetch_assoc
http://php.net/manual/en/mysqli-result.fetch-assoc.php
if ($result = mysqli_query($this->connection, $sql)) {
/* fetch associative array */
while ($item = mysqli_fetch_array($result)) {
echo $item['id']. ' ' . $item['user_name'] .'<br />';
}
/* free result set */
mysqli_free_result($result);
}
感谢你们试图帮助我,但我只是设法通过一些小的更改来修复它,它们是:
将方法namd从__construct更改为DatabaseConnection类下的DBcon,然后我在getQueryAction:中做了这个
$this->result=mysqli_query($this-->connection->DBcon(),$sql);
全班同学:
class DatabaseConnect{
protected $host = 'localhost';
protected $user = 'root';
protected $pass = 'root';
protected $db = 'test';
public function DBcon(){
$con = mysqli_connect($this->host, $this->user, $this->pass, $this->db) or die('Cannot Connect to DB');
return $con;
}
}
class ExecuteQuery{
public $connection;
public $result;
public function __construct(){
$this->connection = new DatabaseConnect();
}
public function getQueryAction($sql){
$this->result = mysqli_query($this->connection->DBcon(), $sql);
}
public function setStringAction($string){
$file = file_get_contents('queryFile.json');
$json = json_decode($file, true);
foreach($json['Queries'] as $this->result){
return $this->result[$string];
}
}
}
$execute = new ExecuteQuery();
现在一切都很完美,仍然不确定为什么前面的方法(存在于初始问题中),但这是有效的xD