gpt4 book ai didi

php - 在 Laravel 中使用带有 LIKE 子句和可变列名称的 DB::select()

转载 作者:行者123 更新时间:2023-12-05 09:22:40 25 4
gpt4 key购买 nike

在文档中,

$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 样式。但如果不可能,那么我将只使用查询生成器。

信息:

  • Laravel v4.2
  • PostgreSQL

最佳答案

它可以用更多的Query Builder 风格来完成,比如:

$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 转义符添加到表名和列名中。此外,它在数据库驱动程序之间更具可移植性。它还支持轻松加入。无需使用您想要的方法。

关于php - 在 Laravel 中使用带有 LIKE 子句和可变列名称的 DB::select(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25178502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com