sql >> データベース >  >> RDS >> Mysql

PHPの別のクラスのMySQLiを使用する

    このエラーにつながるいくつかの悪い習慣があります。

    明らかに、データベースからユーザーを拡張することは間違った動きです。また、Databaseクラス全体は、何の役にも立たないため、かなり役に立ちません。

    したがって、私は提案します

    • 役に立たないデータベースクラスを取り除きます。
    • シングルを作成する バニラmysqliからの$dbインスタンス。
    • データベース接続を必要とするすべてのクラスにコンストラクターパラメーターとして渡します

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



    1. SQLiteを除く

    2. JDBCバッチ操作の理解

    3. レルムからSqliteに移行することは可能ですか?

    4. MySqlは、日次、週次、月次、および年次でレコードまたはデータを取得します