在文件里,
$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 * 风格。但是如果不可能的话,我将只使用Query Builder。
信息:
- 拉瑞维尔v4.2 *
- PostgreSQL语言 *
5条答案
按热度按时间0yg35tkg1#
它可以用更 * Query Builder * 的风格来完成,如下所示:
使用
DB::select()
执行此操作的唯一可靠方法是:它产生了正确的查询,我对照数据库检查了它,但也有一个空数组,或错误的结果。即使这个方法以某种方式工作,你仍然必须手动转义表和列名,这是乏味的,显然不适用于?。如果你让我们假设有一个名为
values
的$column
,这个方法会中断,因为values
是保留字(至少在MySQL中是这样)。强烈建议使用Query Builder方法,因为它还可以自动将SQL转义添加到表名和列名中。而且它在DB驱动程序之间的可移植性更强。它还可以轻松地支持连接。无需使用您想要的方法。
8yoxcaq72#
我找到工作的唯一方法
bvuwiixz3#
使用应用程序\用户; //不要忘记将此添加到标头
$result =用户::where('列名称','类似'," % $值%")-〉get();
ruoxqz4g4#
LIKE '%?%'"
不正确。它只能是?
,因为sql查询只需要?
=〉vacency/占位符作为值。不能使用单个逗号或通配符。所以你需要用 value 而不是
?
=〉(占位符)来添加%
符号,而且它也是安全的。所以我们需要
de90aj5v5#
我不会向任何人推荐
DB::select()
,即使你有完全有效的SQL,直接在数据库引擎中工作Laravel会产生特殊的错误和虚构的错误描述。