How can the principles of object-oriented programming be applied to improve the structure of PHP code, especially when dealing with database queries?

When dealing with database queries in PHP, the principles of object-oriented programming can be applied to improve code structure by creating separate classes for database connection, query execution, and result handling. This approach helps in encapsulating related functionality, promoting code reusability, and making the code more maintainable.

// Database class for handling database connection and queries
class Database {
    private $connection;

    public function __construct($host, $username, $password, $database) {
        $this->connection = new mysqli($host, $username, $password, $database);
        if ($this->connection->connect_error) {
            die("Connection failed: " . $this->connection->connect_error);
        }
    }

    public function query($sql) {
        return $this->connection->query($sql);
    }

    public function fetchArray($result) {
        return $result->fetch_array();
    }

    public function close() {
        $this->connection->close();
    }
}

// Example usage
$database = new Database('localhost', 'username', 'password', 'dbname');
$result = $database->query("SELECT * FROM users");
while ($row = $database->fetchArray($result)) {
    // Process each row
}
$database->close();