On this page
Why You Should Never Concatenate SQL Strings in Laravel
You should never concatenate SQL strings in Laravel (or any application) because it opens your application to SQL Injection attacks — one of the most dangerous and common security vulnerabilities.
Here’s why string concatenation is dangerous, especially in SQL queries:
On this page
Why You Should Never Concatenate SQL Strings in Laravel
$email = $_GET['email']; $sql = "SELECT * FROM users WHERE email = '$email'"; $users = DB::select($sql);
This works fine if the email is normal, like john@example.com. But if a malicious user enters:
' OR 1=1 --
This query will return all users, bypassing authentication. This is a classic SQL injection attack.
Safe Way: Parameter Binding
Laravel provides a way to safely bind parameters using ? placeholders:
$email = $_GET['email']; $users = DB::select('SELECT * FROM users WHERE email = ?', [$email]);
This safely escapes the input, treating it as a string, even if it contains special characters or malicious content.
Why Use Parameter Binding?
- Prevents SQL Injection — automatically escapes values. - Keeps Queries Clean — separates logic and data. - Improves Performance — databases can optimize prepared queries.
Bonus: Named Bindings
You can also use named bindings for better readability:
DB::select('SELECT * FROM users WHERE email = :email', ['email' => $email]);
Conclusion
Never trust user input in raw SQL queries. Always use Laravel’s built-in parameter binding to keep your application safe, clean, and optimized.
Happy coding! 🔐