QueryException (SQL Errors)
A database query failed due to invalid SQL, constraint violations, or connection issues.
Explanation
QueryException is thrown by Laravel's database layer when a SQL query fails. This can happen for many reasons including syntax errors in raw queries, foreign key constraint violations, unique constraint violations, or database connection issues. The exception message includes the raw SQL query that failed, making it easier to debug. Common scenarios include inserting duplicate values into unique columns, referencing non-existent foreign keys, or using database-specific syntax that your database driver doesn't support.
Common Causes
- Unique constraint violation
- Foreign key constraint failure
- Invalid SQL syntax
- Database connection lost
- Column type mismatch
Solution
Read the QueryException message carefully to identify which SQL query failed and why. Use DB::enableQueryLog() and dd(DB::getQueryLog()) to inspect queries during development. For constraint violations, ensure referenced records exist before inserting or updating. Use database transactions for operations that involve multiple related queries. Add proper database indexes for frequently queried columns. Test raw SQL queries directly in your database client to verify they work.
Code Example
// This can throw QueryException if email already exists
User::create(['email' => 'existing@example.com', 'name' => 'John']);
// Fix: Use findOrCreate for idempotent operations
$user = User::firstOrCreate(
['email' => 'existing@example.com'],
['name' => 'John']
);
// For raw queries with error handling
try {
DB::insert('INSERT INTO users (email, name) VALUES (?, ?)',
['test@example.com', 'Test']);
} catch (QueryException $e) {
if ($e->errorInfo[1] == 1062) {
// Duplicate entry
return response()->json(['error' => 'Email already exists'], 422);
}
throw $e;
}
Error Information
Language
php
Framework
laravel
Difficulty
Intermediate
Views
27
Related Errors
Database
PDOException (Database Connection)
PHP failed to connect to or communicate with the database server.
403
Laravel
AuthorizationException (403)
The authenticated user lacks permission to perform the requested action.
DevOps
Laravel Schedule Task Failure
A scheduled task failed to execute or completed with errors.
Database
Duplicate Entry
The code tries to insert a record with a value that already exists in a unique column.