在使用数据库相关功能之前,需要确保引入了 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 的常用示例。