这些代码有什么问题?我对mysqli非常新。我总是得到这个错误
警告:mysqli_query()要求参数1为mysqli,在第11行的C:\ localhost \ path \ core.php中给出null 错误,查询失败!!!
我测试了连接,它正在工作和连接,所以我不明白为什么我总是看到这个警告,我的查询失败。我也检查了查询,这是正确的。这是我的代码:
的configuration.php
<?php
$dbhost = 'xxx';
$dbuser = 'xxx';
$dbpass = 'xxx';
$dbname = 'xxx';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die ('Error connecting to mysql');
?>
core.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 );
}
}
?>
答案 0 :(得分:3)
你可能试图在Core类之外找到一个变量。首先,您可能希望在此处阅读variable scope。
快速而肮脏的解决方案是:
第一次实例化Core类时注入$conn
变量。
向Core类添加__construct() {}
方法:
<?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 );
}
}
?>
当你第一次实例化你的Core类时:
$class = new Core($conn); // We are injecting the $conn here
多数民众赞成。如果您觉得有趣,请在此处详细了解dependency injection。
答案 1 :(得分:0)
$ conn不存在于您当前使用的范围内
在创建时将连接传递给类或使用全局变量$ conn
答案 2 :(得分:0)
这是一个可变范围问题。您的$conn
变量是在函数范围之外定义的,并且在Core
类中不可用。
作为快速修复,您可以将其更改为全局变量:
global $conn;
有关详细信息,请参阅PHP Manual文档。