父构造函数中的数据库连接不在子方法

时间:2017-06-17 13:23:47

标签: php sql

我有一个父类页面,在其中我有一个成功连接到数据库的构造函数。这是代码:

//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,可能是我错过了一些直截了当的事情。任何帮助都会很棒。感谢

我知道查询是错误的 - 我只是想为了调试而简化它们

  1. 列表项

1 个答案:

答案 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);