在文档中,
$results = DB::select('select * from users where id = ?', array(1));
问题
我有一个变量$column
和$value
,我希望他们根据以下列搜索数据库:
$results = DB::select('select * from users where ? LIKE "%?%"', array($column, $value));
但这引发了一个错误:
SQLSTATE[42P18]: Indeterminate datatype: 7 ERROR: could not determine data type of parameter $2 (SQL: SELECT * FROM test WHERE refno LIKE '%te%')
我试着把值编码成这样:
$results = DB::select('select * from users where ? LIKE "%te%"', array($column));
但它返回一个空白数组。
我该怎么做?请帮忙。
编辑:
查询实际上很长(有多个联接(。因此,如果可能的话,我不喜欢使用查询生成器样式。但如果这不可能,那么我将只使用查询生成器。
信息:
- Laravel v4.2
- PostgreSQL
它可以用更多的查询生成器风格来完成,比如:
$results = DB::table('users')
->where($column, 'LIKE', '%' . $value . '%')
->get();
编辑
使用DB::select()
的唯一可靠方法是:
$results = DB::select("select * from users where ? LIKE '%?%'", array($column, $value));
它产生了正确的查询,我对照数据库进行了检查,但也产生了空白数组或错误的结果。即使这种方法以某种方式起作用,您仍然必须手动转义表和列名,这很乏味,而且显然不适用于?。如果假设有一个名为values
的$column
,那么这个方法就会中断,因为values
是一个保留字(至少在MySQL中是这样(。
强烈建议使用Query Builder方法,因为它还会自动将SQL转义添加到表名和列名中。此外,它在DB驱动程序之间更具可移植性。它还可以轻松地支持联接。无需使用您想要的方法。
我找到工作的唯一方法
$phone = '%'.$phone.'%';
$seachbyphone = DB::select('SELECT * FROM user WHERE phoneno LIKE ?',[$phone]);
试试这个:
使用App''User//别忘了把这个添加到标题
$result=User::where('columnName','LIKE',"%$value%"(->get((;
LIKE '%?%'"
不正确。它必须仅为?
,因为sql查询仅要求?
=>值的空位/占位符。没有任何逗号或通配符。
所以您需要添加带有值的%
符号而不是带有?
=>(占位符(及其安全性
这就是为什么我们需要
$results = DB::select("select * from users where ? LIKE ?, [$column, '%'.$value.'%'.]);
我不会向任何人推荐DB::select()
,即使您有完全有效的SQL,可以直接在数据库引擎中工作。Laravel会通过虚构的错误描述产生特殊的错误。请改用DB::table('my_table')->select('...')
。