在文档中,
$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));
但它返回一个空白数组。
我该怎么做?请帮忙。
查询实际上很长(有多个连接)。所以我希望尽可能不使用 Query Builder 样式。但如果它不可能,那么我将只使用查询生成器。
的信息:
答案 0 :(得分:3)
可以使用更多 Query Builder 样式完成,例如:
$results = DB::table('users')
->where($column, 'LIKE', '%' . $value . '%')
->get();
修改强>
使用DB::select()
的唯一可靠方法是:
$results = DB::select("select * from users where ? LIKE '%?%'", array($column, $value));
它会生成正确的查询,我会根据数据库进行检查,还会生成空白数组,或者结果错误。即使这种方法以某种方式工作,你仍然必须手动转义表和列名称,这是乏味的,显然不起作用?如果你说有一个名为$column
的{{1}}这个方法会破坏,因为values
是一个保留字(至少在MySQL中)。
强烈建议使用Query Builder方法,因为它还会自动将SQL转义添加到表名和列名中。此外,它在数据库驱动程序中更具可移植性。它还轻松支持连接。无需使用您想要的方法。
答案 1 :(得分:0)
试试这个:
使用App \ User; //不要忘记将此添加到标题
$ result = User :: where('columnName','LIKE',“%$ value%”) - > get();
答案 2 :(得分:0)
我找到工作的唯一途径
$phone = '%'.$phone.'%';
$seachbyphone = DB::select('SELECT * FROM user WHERE phoneno LIKE ?',[$phone]);