此篇文章基于
- laravel版本:5.5
laravel基于DB的原生查询可以使用
DB
facade 运行查询。DB
facade 为每种类型的查询提供了方法:select
、update
、insert
、delete
和statement
。以下是知识点:
(1)运行查询语句
$users = DB::select('select * from users where active = ?', [1]);
(2)运行插入语句
可以在DB
facade 上使用insert
方法来执行insert
语句。与select
一样,该方法将原生 SQL 查询作为其第一个参数,并将其绑定的数据作为第二个参数:
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
(3)运行更新语句
update
方法用于更新数据库中的现有记录。该方法会返回受该语句影响的行数:
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);
(4)运行删除语句
delete
方法用于删除数据库中记录。与update
一样,会返回受该语句影响的行数:
$deleted = DB::delete('delete from users');
(5)运行普通语句
有些数据库语句不会返回任何值。对于这些语句,可以在DB
facade 上使用statement
方法来操作:
DB::statement('drop table users');
(6)使用命名绑定
除了使用?
来表示参数绑定外,你也可以使用命名绑定来执行一个查询:
$results = DB::select('select * from users where id = :id', ['id' => 1]);
在实际的使用中使用模糊查询,发现:
(1)此写法查询错误
$a = DB::select('select *,
day(WN_DATE) WN_DAYOFMONTH,
month(WN_DATE) WN_MONTH,
year(WN_DATE) WN_YEAR
from mytable
where year(WN_DATE)
like %?%
order by WN_DATE DESC',
array($_SESSION['filterOn']));
(2)此查询错误
$a = DB::select('select *,
day(WN_DATE) WN_DAYOFMONTH,
month(WN_DATE) WN_MONTH,
year(WN_DATE) WN_YEAR
from mytable
where year(WN_DATE)
like %:filterOn%
order by WN_DATE DESC',
array('filterOn'=>$_SESSION['filterOn']));
正确的使用模糊查找方法:
$query = "select *, day(WN_DATE) WN_DAYOFMONTH, month(WN_DATE) WN_MONTH, year(WN_DATE) WN_YEAR from mytable where year(WN_DATE) like ? order by WN_DATE DESC";
$param = '%'.$_SESSION['filterOn'].'%';
$result = DB::select($query , array($param));