当我在没有类的情况下使用 mysqli 时,一切正常:
index.php
require_once(dirname(__FILE__) . '/config.php');
$mysqli = new mysqli($hostname, $username, $password, $dbname);
$queryText = "SELECT * FROM User";
if($query = $mysqli->query($queryText)) {
$results = $query->fetch_array();
echo $results['userId'];
} else {
echo "Error ";
echo $mysqli->errno . " " . $this->mysqli->error;
}
?>
但是当我开始使用 mysqli 和 class 时,出现了问题。 connectDB 没有给出任何错误,所以我连接到数据库。但是当尝试执行任何查询时,它给我“没有选择数据库错误” index.php的结果是:Error 1046 No database selected
index.php
<?php
require_once(dirname(__FILE__) . '/banana.php');
$banana = new Banana(1);
if ($banana->connectDB()) {
$banana->doQuery();
}
?>
banana.php
<?php
require_once(dirname(__FILE__) . '/config.php');
class Banana {
private $mysqli, $userId, $query;
function __construct($userId) {
$this->userId = $userId;
}
function __destruct() {
$this->mysqli->close();
}
public function connectDB() { // Подключение к БД
$this->mysqli = new mysqli($hostname, $username, $password, $dbname);
if ($this->mysqli->connect_errno) {
echo "Error (" . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error;
return false;
}
return true;
}
public function doQuery() {
$queryText = "SELECT * FROM User";
if($this->query = $this->mysqli->query($queryText)) {
$results = $query->fetch_array();
echo $results['userId'];
} else {
echo "Error ";
echo $this->mysqli->errno . " " . $this->mysqli->error;
}
}
?>
所以这是非常令人沮丧的。我在 php 上学习了大约 2 周,但几天都找不到答案。我想答案是显而易见的,但我看不到。 感谢您的时间和耐心。
最佳答案
运行脚本时遇到的第一个问题如下:
public function connectDB() { // Подключение к БД
$this->mysqli = new mysqli($hostname, $username, $password, $dbname);
请注意,您在函数调用中使用的所有 4 个变量($hostname
等)在方法的范围内均未定义。
有几种方法可以解决这个问题:
- 将变量作为参数传递给方法:
public function connectDB($hostname, ...
- 将必要的变量传递给类构造函数,并在类中设置稍后可以使用的配置属性;
- 使用常量而不是变量;
- 将变量声明为全局变量。
我会推荐前两个之一,绝对不是最后一个。
您可以在 php 手册中阅读有关 variable scope 的更多信息。 .
关于php mysqli "No database selected"使用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701262/