在PHP中使用来自另一个类的MySQLi

时间:2017-04-25 18:52:15

标签: php mysql mysqli

我真的希望有人可以帮助我找出我所缺少的东西。我已将我的安装从PHP 5.6升级到7.0,这迫使我从Mysql更新到Mysqli,由于某种原因导致我的设置中断。

我研究并遵循了本指南“在其他课程中使用MySQLi”:Using MySQLi in other classes

我正在写作为最后的手段并且也看过其他网站,但似乎问题来自其他地方。

首先我有一个数据库类:

    private $serverName = "localhost";
    private $userName = "DBUserName";
    private $pass = "UserPassword";
    private $database = "SelectedDB";

    public $conn;


    public function __construct(){

             $this->conn = new mysqli($this->serverName, $this->userName,$this->pass,$this->database);


            }

然后我有一个API类,我想访问这个看起来像

的连接
require_once 'Database.php';
class MyAPI{
private $db;
public function __construct($request_uri, $postData, $origin) {



    $this->db = new Database();


}

最后我尝试从函数中调用它:

$getUserResult = mysqli_query( $this->db->conn, $getUserQry);

我什么时候打电话给$ this-> db-> conn我收到内部服务器错误500

如果我在MyAPI类中创建数据库连接,那么对我来说没有任何问题。

我希望有人能指出我的方向。

更新: 我更正了脚本中的拼写错误,现在我得到200但是查询mysqli_query的值仍然是null。

如果我创建$ dbtest = new database();并使用它而不是它工作正常。有没有办法让它在构造函数内部工作,引用$ db?

1 个答案:

答案 0 :(得分:0)

  • 摆脱无用的数据库类。
  • 从vanilla mysqli创建单个 $ db实例。
  • 将其作为构造函数参数传递给需要数据库连接的每个类

database.php中:

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli("localhost", "DBUserName", "UserPassword", "SelectedDB");
$db->set_charset('utf8');

myapi.php

<?php
class MyAPI
{
    protected $db;

    public function __construct($db, $request_uri, $postData, $origin)
    {
        $this->db = $db;
    }

    public function getUser()
    {
        $getUserQry = "...";
        $res = $this->db->query($getUserQry);
    }
}

app.php

<?php
require_once 'Database.php';
require_once 'myapi.php';

$api = new MyAPI($db, $request_uri, $postData, $origin);
$user = $api->getUser();