在使用数据库相关功能之前,需要确保引入了 DB 门面。通常在控制器顶部添加如下代码:
use Illuminate\Support\Facades\DB;
SELECT)使用 DB::select 方法来执行 SELECT 查询,该方法会返回一个包含查询结果的数组。
// 简单的 SELECT 查询
$users = DB::select('SELECT * FROM users');
foreach ($users as $user) {
echo $user->name;
}
// 带参数的 SELECT 查询
$id = 1;
$user = DB::select('SELECT * FROM users WHERE id = ?', [$id]);
if ($user) {
echo $user[0]->name;
}
在上述示例中,第一个查询会返回 users 表中的所有记录,第二个查询使用了占位符 ? 来防止 SQL 注入,将参数 $id 作为数组传递给 DB::select 方法。
INSERT)使用 DB::insert 方法来执行 INSERT 查询,该方法会返回一个布尔值,表示插入操作是否成功。
// 插入单条记录
$affected = DB::insert('INSERT INTO users (name, email) VALUES (?, ?)', ['John Doe', 'johndoe@example.com']);
if ($affected) {
echo 'Record inserted successfully.';
}
// 插入多条记录
$data = [
['name' => 'Jane Smith', 'email' => 'janesmith@example.com'],
['name' => 'Bob Johnson', 'email' => 'bobjohnson@example.com']
];
foreach ($data as $record) {
DB::insert('INSERT INTO users (name, email) VALUES (?, ?)', [$record['name'], $record['email']]);
}
UPDATE)使用 DB::update 方法来执行 UPDATE 查询,该方法会返回受影响的行数。
// 更新记录
$id = 1;
$affected = DB::update('UPDATE users SET name = ? WHERE id = ?', ['Updated Name', $id]);
if ($affected > 0) {
echo 'Record updated successfully.';
}
DELETE)使用 DB::delete 方法来执行 DELETE 查询,该方法会返回受影响的行数。
// 删除记录
$id = 1;
$affected = DB::delete('DELETE FROM users WHERE id = ?', [$id]);
if ($affected > 0) {
echo 'Record deleted successfully.';
}
CREATE TABLE、ALTER TABLE 等)使用 DB::statement 方法来执行非查询语句,该方法通常用于执行不返回结果集的 SQL 语句。
// 创建表
DB::statement('CREATE TABLE IF NOT EXISTS new_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))');
// 修改表结构
DB::statement('ALTER TABLE users ADD COLUMN phone VARCHAR(20)');
? 来防止 SQL 注入攻击,避免直接将用户输入的数据拼接到 SQL 语句中。DB::beginTransaction()、DB::commit() 和 DB::rollBack() 方法来管理事务。例如:DB::beginTransaction();
try {
DB::insert('INSERT INTO users (name, email) VALUES (?, ?)', ['John Doe', 'johndoe@example.com']);
DB::update('UPDATE users SET name = ? WHERE id = ?', ['Updated Name', 1]);
DB::commit();
echo 'Transaction committed successfully.';
} catch (\Exception $e) {
DB::rollBack();
echo 'Transaction rolled back: '. $e->getMessage();
}
以上就是 Laravel 中直接执行 SQL 的常用示例。