我正在使用像这样的laravel查询构建器。
$col1 = Input::get('col1','');
$col2 = Input::get('col2','');
$result = DB::table('table1')
->select('id', 'col1', 'col2', 'col3')
->whereRaw("col1 like '%?%'", [$col1])
->whereRaw("col2 like '%?%'", [$col2])
->orderBy($orderBy, $orderType) //orderBy=col1, ordeyType=ASC
->skip($ofset)->take($limit) //$ofser=0, $limit=10
->get();
我一无所获。如果我使用toSql()函数。我这样得到这个SQL
select `id`, `col1`, `col2`, `col3`
from `table1` where col1 like '%?%' and col2 like '%?%'
order by `col1` ASC limit 10 offset 0
问号不应该存在。它必须用值替换它们。我用这段代码来调试它。
Log::info(var_export(DB::getQueryLog(), true));
日志看起来像这样
2 =>
array (
'query' => 'select `id`, `col1`, `col2`, `col3` from `table1` where col1 like \'%?%\' and col2 like \'%?%\' order by `col1` ASC limit 10 offset 0',
'bindings' =>
array (
0 => 'k',
1 => '',
),
'time' => 25.71,
我认为绑定不起作用我做错了什么。因为如果我在数据库中尝试此代码它的工作原理。 (另外,我想获得发送到数据库的实际sql。我该怎么做?)
select `id`, `col1`, `col2`, `col3` from `table1`
where col1 like '%k%' and col2 like '%%'
order by `col1` ASC limit 10 offset 0
答案 0 :(得分:11)
想出来。的?需要单独使用,因此将%符号连接到col变量。并将col变量放在一个数组中(假设你使用的是Laravel 4)
变化:
->whereRaw("col1 like '%?%'", [$col1])
->whereRaw("col2 like '%?%'", [$col2])
要:
->whereRaw("col1 like ?", array('%'.$col1.'%'))
->whereRaw("col2 like ?", array('%'.$col2.'%'))
答案 1 :(得分:0)
试
->whereRaw("col1 like '%?%'", [$col1])
->whereRaw("col2 like '%?%'", [$col2])
到
->whereRaw("col1 like '%?%'", $col1)
->whereRaw("col2 like '%?%'", $col2)