【问题标题】:Using DB::select() in Laravel with LIKE clause and a variable column name在 Laravel 中使用带有 LIKE 子句和变量列名的 DB::select()
【发布时间】:2014-08-07 09:10:24
【问题描述】:

在文档中,

$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

【问题讨论】:

  • 有什么理由不使用查询生成器?

标签: php database laravel


【解决方案1】:

它可以用更多的 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 转义添加到表名和列名中。此外,它在 DB 驱动程序中更具可移植性。它还支持轻松连接。无需使用您想要的方法。

【讨论】:

  • 嗨,@delmadord 感谢您的回答。是的,我可以做到。谢谢。我编辑了我的问题。
  • 谢谢..我意识到没有其他办法..我只需要使用查询生成器样式..再次感谢。
【解决方案2】:

我找到工作的唯一方法

$phone = '%'.$phone.'%';

$seachbyphone = DB::select('SELECT * FROM user WHERE phoneno LIKE ?',[$phone]);

【讨论】:

    【解决方案3】:

    试试这个:

    使用应用\用户; //不要忘记将其添加到标题中

    $result = User::where('columnName', 'LIKE', "%$value%")->get();

    【讨论】:

      【解决方案4】:

      LIKE '%?%'" 不正确。它必须是 ?,因为 sql 查询只需要 ? =>vacancy/placeholder 作为值。不是任何一个逗号或通配符。

      所以你需要用value而不是? =>(占位符)添加%符号,并且它也是安全的。

      这就是我们需要的原因

      $results = DB::select("select * from users where ? LIKE ?, [$column, '%'.$value.'%'.]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-08
        • 2023-04-02
        • 1970-01-01
        • 2012-12-18
        • 2021-04-16
        • 2014-09-01
        • 1970-01-01
        相关资源
        最近更新 更多