0

这些代码有什么问题?我对mysqli非常陌生。我总是收到这个错误

警告:mysqli_query() 期望参数 1 为 mysqli,在第 11 行的 C:\localhost\path\core.php 中给出 null 错误,查询失败!!!

我测试了连接,它正在工作并连接,所以我不明白为什么我总是看到这个警告并且我的查询失败。我还检查了查询,它是正确的。这是我的代码:

配置.php

<?php
$dbhost = 'xxx'; 
$dbuser = 'xxx';
$dbpass = 'xxx'; 
$dbname = 'xxx'; 

$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die ('Error connecting to mysql');

?>

核心.php

<?php
require_once('configuration.php');

class Core {
    public $coreTable;
    public $result;
    public $num_rows;

    function Execute($query) {
        $this->result = mysqli_query($conn,$query) or die('Error, query failed!!!'); //line 11
        $this->row_cnt = mysqli_num_rows( $this->result );
    }
}
?>
4

3 回答 3

3

您可能正在尝试访问 Core 类之外的变量。首先,您可能想在此处阅读有关变量范围的信息。

快速而肮脏的解决方案是:

$conn第一次实例化 Core 类时注入变量。

__construct() {}向 Core 类添加一个方法:

<?php
require_once('configuration.php');

class Core {
    public $connection; // Notice here
    public $coreTable;
    public $result;
    public $num_rows;

    /**
     * Documenting classes and methods is a good practice.
     * Constructor method
     * 
     * @param Resource $conn Mysql connection.
     * @return void
     */
    public function __construct($conn)
    {
       $this->connection = $conn;
    }

    function Execute($query) {
        $this->result = mysqli_query($this->connection,$query) or die('Error, query failed!!!'); //line 11
        $this->row_cnt = mysqli_num_rows( $this->result );
    }
  }
?>

当你第一次实例化你的核心类时:

$class = new Core($conn); // We are injecting the $conn here

而已。如果您觉得这听起来很有趣,请在此处阅读有关依赖注入的更多信息。

于 2013-09-26T14:34:28.640 回答
0

这是一个可变范围问题。您的$conn变量是在函数范围之外定义的,并且在类中不可用Core

作为快速修复,您可以将其更改为全局变量:

global $conn;

有关更多信息,请参阅PHP 手册文档。

于 2013-09-26T14:24:47.877 回答
0

$conn 在您当前使用的范围内不存在

在创建时将连接传递给类或使用全局变量 $conn

于 2013-09-26T14:23:13.507 回答