What are the best practices for encapsulating database queries in a class for PHP applications?
Encapsulating database queries in a class helps to improve code organization, reusability, and maintainability in PHP applications. By creating a separate class specifically for handling database interactions, it allows for better separation of concerns and easier testing of database-related functionality.
<?php
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 fetch($result) {
return $result->fetch_assoc();
}
public function close() {
$this->connection->close();
}
}
// Example usage
$db = new Database("localhost", "username", "password", "database");
$result = $db->query("SELECT * FROM users");
while ($row = $db->fetch($result)) {
echo $row['username'] . "<br>";
}
$db->close();
?>