php - 在 PHP 中使用另一个类中的 MySQLi

标签 php mysql mysqli

我真的希望有人能帮我弄清楚我错过了什么。我已将安装从 PHP 5.6 升级到 7.0,这迫使我从 Mysql 更新到 Mysqli,这由于某种原因破坏了我的设置。

我研究并遵循了本指南“在其他类(class)中使用 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 中的值仍然为空。

如果我创建 $dbtest = new database();并使用它来代替它效果很好。有什么办法可以让它在构造函数内工作并引用 $db 吗?

最佳答案

有几种不良做法会导致您出现此错误。

显然,从数据库扩展用户是一个错误的举动。另外,整个 Database 类毫无用处,因为它没有做任何有用的事情。

因此我建议

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

数据库.php:

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

myapi.php

<?php
class MyAPI
{
    protected $db;

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

    public function getUser($id)
    {
        $sql = "SELECT * FROM users where id=?";
        $stmt = $this->db->prepate($sql);
        $stmt->bind_param("s", $id);
        $stmt->execute();
        $result = $stmt->get_result();
        return $result->fetch_assoc();
    }
}

app.php

<?php
# require_once 'Database.php';
# require_once 'myapi.php';
require 'vendor/autoload.php'; // autoloading is a must

$api = new MyAPI($db, $request_uri, $postData, $origin);
$user = $api->getUser($_POST['id']);

关于php - 在 PHP 中使用另一个类中的 MySQLi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43618741/

相关文章:

PHP 从平面数据集(来自 Mysql 表)创建多维对象

MySql/Cloudbees VARCHAR 作为外键

java - MySQL 数据库连接速度无法正常工作

mysql - 如何将mysql中文本框中的文本保存为utf-8

php - 发布一个base64编码的文件问题

php - ajax HTTP 请求的等待时间

php - 连接查询中的脚本查询问题

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - 如何最大化 Get 查询长度?

php - 从 MYSQLI 查询中删除 db $conn