INSI YA KUFAHAMU MODELS NA DATABASE INTERACTION KATIKA PHP
Kushughulikia data na database
Kutekeleza queries (SELECT, INSERT, UPDATE, DELETE)
Kutoa data kwa controllers kwa usahihi
Goal: Keep database logic separate from business logic na presentation.
⚙️ 2. Project Folder Structure
project_root/
│
├── app/
│ ├── models/
│ │ └── User.php
│ ├── controllers/
│ │ └── UserController.php
│ └── views/
│ └── user_view.php
├── core/
│ └── Controller.php
├── public/
│ └── index.php
└── config/
└── config.php
🧩 3. Database Configuration (config/config.php)
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'mvc_db');
define('DB_USER', 'root');
define('DB_PASS', '');
🧩 4. Base Model Example (app/models/User.php)
<?php
class User {
private $pdo;
public function __construct(){
$this->pdo = new PDO(
"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=utf8mb4",
DB_USER,
DB_PASS
);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
// Get all users
public function getAllUsers(){
$stmt = $this->pdo->query("SELECT * FROM users");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
// Get single user by ID
public function getUserById($id){
$stmt = $this->pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $id]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
// Insert new user
public function createUser($username, $email, $password){
$stmt = $this->pdo->prepare("INSERT INTO users (username, email, password) VALUES (:username, :email, :password)");
return $stmt->execute([
'username' => $username,
'email' => $email,
'password' => password_hash($password, PASSWORD_DEFAULT)
]);
}
// Update user
public function updateUser($id, $username, $email){
$stmt = $this->pdo->prepare("UPDATE users SET username = :username, email = :email WHERE id = :id");
return $stmt->execute([
'id' => $id,
'username' => $username,
'email' => $email
]);
}
// Delete user
public function deleteUser($id){
$stmt = $this->pdo->prepare("DELETE FROM users WHERE id = :id");
return $stmt->execute(['id' => $id]);
}
}
🧩 5. Using Model in Controller (app/controllers/UserController.php)
<?php
class UserController extends Controller {
public function index(){
$userModel = $this->model('User');
$users = $userModel->getAllUsers();
$this->view('user_view', ['users' => $users]);
}
public function create(){
$userModel = $this->model('User');
$userModel->createUser('JohnDoe', 'john@example.com', 'password123');
echo "User created successfully!";
}
}
🔑 6. Best Practices
Use PDO with prepared statements – prevent SQL injection
Keep SQL in models only – controllers should not contain queries
Hash passwords – always use password_hash()
Return data as arrays or objects – makes it easier for views
Separate responsibilities – models only handle database interactions
✅ 7. Hitimisho
Models simplify database interactions na keep code clean
They are essential for MVC architecture
Combine with controllers, views, autoloading, and routing for fully functional PHP applications
🔗 Tembelea:
👉 https://www.faulink.com/
Kwa mafunzo zaidi ya PHP, models, na database interaction best practices.