Avoid these common mistakes when using PDOdb.
// Loads entire table - could be millions of rows!
$users = $db->find()->from('users')->get();// Always limit your results
$users = $db->find()
->from('users')
->where('active', 1)
->orderBy('created_at', 'DESC')
->limit(100)
->get();$posts = $db->find()->from('posts')->get();
foreach ($posts as $post) {
$author = $db->find()
->from('users')
->where('id', $post['user_id'])
->getOne(); // N queries!
}$posts = $db->find()
->from('posts AS p')
->select([
'p.id', 'p.title',
'author_name' => 'u.name',
'author_email' => 'u.email'
])
->join('users AS u', 'u.id = p.user_id')
->get(); // Single query$db->startTransaction();
$db->find()->table('users')->insert($user);
// If error occurs here, transaction stays open
$db->commit();$db->startTransaction();
try {
$db->find()->table('users')->insert($user);
$db->commit();
} catch (\Exception $e) {
$db->rollback();
throw $e;
}// Updates EVERY user!
$db->find()->table('users')->update(['status' => 'active']);// Update only specific users
$db->find()
->table('users')
->where('id', $userId)
->update(['status' => 'active']);$name = $_GET['name'];
$users = $db->rawQuery("SELECT * FROM users WHERE name = '$name'");$name = $_GET['name'];
$users = $db->find()->from('users')->where('name', $name)->get();$users = $db->find()->from('users')->get(); // 1M users = 1GB+ RAMforeach ($db->find()->from('users')->cursor() as $user) {
processUser($user); // Minimal memory usage
}// No index on email column
$user = $db->find()
->from('users')
->where('email', 'alice@example.com')
->getOne(); // Full table scan!CREATE INDEX idx_users_email ON users(email);$user = $db->find()
->from('users')
->where('email', 'alice@example.com')
->getOne(); // Fast indexed lookup$db->find()->table('users')->where('id', $id)->update(['name' => 'New Name']);
// No check if row exists or was updated$affected = $db->find()
->table('users')
->where('id', $id)
->update(['name' => 'New Name']);
if ($affected === 0) {
// User not found or no changes
}$db = new PdoDb('mysql', [
'host' => 'localhost',
'username' => 'root',
'password' => 'password123',
'dbname' => 'mydb'
]);$db = new PdoDb('mysql', [
'host' => getenv('DB_HOST'),
'username' => getenv('DB_USERNAME'),
'password' => getenv('DB_PASSWORD'),
'dbname' => getenv('DB_NAME')
]);$id = $_GET['id'];
$users = $db->rawQuery("SELECT * FROM users WHERE id = $id");$id = $_GET['id'];
$users = $db->find()->from('users')->where('id', $id)->get();
// Automatically uses prepared statements- Always use LIMIT
- Avoid N+1 queries with JOINs
- Use transactions with proper rollback
- Always specify WHERE for UPDATE/DELETE
- Never concatenate user input
- Use batch processing for large datasets
- Create indexes for frequently queried columns
- Check affected rows and results
- Store credentials in environment variables
- Let PDOdb use prepared statements automatically
- Security - Security best practices
- Performance - Performance optimization
- Memory Management - Handle large datasets