laravel原生sql操作以及like模糊查詢的坑點
阿新 • • 發佈:2018-12-11
此篇文章基於
- 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));