此篇文章基于
- laravel版本:5.5
laravel基于DB的原生查询可以使用
DBfacade 运行查询。DBfacade 为每种类型的查询提供了方法: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));