我有一个父类页面,在其中我有一个成功连接到数据库的构造函数。这是代码:
//establish database connection
function __construct() {
require('db_conn.php');
$this->conn = new mysqli($servername, $username, $password);
}
我希望能够访问子类页面中的数据库 - 例如注册页面类。
我在该寄存器子类中有一个函数login(),需要访问数据库连接变量。这是代码:
private function Register() {
if (isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
//check data is valid i.e. not in database already
$query = mysqli_query($this->conn,'SELECT * FROM users');
if (mysqli_fetch_assoc($query)) {
echo "That email or username already exists!";
} else {
//store data
}
正在检测变量,但似乎没有连接,这很奇怪,因为我已尝试在同一函数中使用mysqli_ping()进行测试,并返回true。
如果我在函数内部需要db连接,则查询可以正常工作。
这是我第一次使用OOP,可能是我错过了一些直截了当的事情。任何帮助都会很棒。感谢
我知道查询是错误的 - 我只是想为了调试而简化它们
答案 0 :(得分:0)
第一个也是最明显的问题是您似乎没有选择要使用的数据库。记住MySQL管理多个数据库。
注意mysqli类实例化的参数4应包含数据库名称
new mysqli('localhost', 'my_user', 'my_password', 'my_db');
而你的不是
$this->conn = new mysqli($servername, $username, $password,'MISSING DATABASE NAME');
我可以建议您在开发时将这些行添加到所有脚本的顶部,以便在浏览器中看到任何错误。
<?php
ini_set('display_errors', 1);
ini_set('log_errors',1);
error_reporting(E_ALL);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);