PHP查询类未返回值


PHP query class not returing values

我正在为我的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