Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden von MySQLi aus einer anderen Klasse in PHP

Es gibt mehrere schlechte Praktiken, die zu diesem Fehler geführt haben.

Das Erweitern von Benutzern aus einer Datenbank ist eindeutig ein falscher Schritt. Außerdem ist die ganze Database-Klasse ziemlich nutzlos, da sie nichts Nützliches tut.

Daher würde ich vorschlagen,

  • Entfernen Sie die nutzlose Database-Klasse.
  • eine Single erstellen $db-Instanz von Vanilla Mysqli.
  • übergeben Sie es als Konstruktorparameter an jede Klasse, die eine Datenbankverbindung benötigt

Datenbank.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']);