将函数参数传递给 sql 查询

Posted

技术标签:

【中文标题】将函数参数传递给 sql 查询【英文标题】:Passing function argument into sql query 【发布时间】:2018-09-07 04:56:21 【问题描述】:

我有一个奇怪的问题。我将控制器中的 ID 传递到函数文件中,以便在查询中使用它。传递 ID 有效,我已将其丢弃以确保它是我期望的实际 ID,并且确实如此。

问题是,当我在我的 sql 中添加 where 子句时,实际上只更改了一行,我得到了错误:

Parse error: syntax error, unexpected '$result' (T_VARIABLE), expecting function (T_FUNCTION)

这是工作版本(尽管显然这是一个广泛的查询)

public function grabList(int $id)
  

      $sql = "
        SELECT *
        FROM schemaTest.List L
          INNER JOIN schemaTest.user u
            ON l.user_id = u.ID
          ";
    

      $result = DB::connection('odbc')->select(DB::raw($sql));
      return $result;

  

但是当我添加使用传递给函数的 ID 的 where 子句时,我得到了错误。

public function grabList(int $id)
  

      $sql = "
        SELECT *
        FROM schemaTest.List L
          INNER JOIN schemaTest.user u
            ON l.user_id = u.ID
        WHERE u.ID = $id 
          ";
    

      $result = DB::connection('odbc')->select(DB::raw($sql));
      return $result;

  

我假设这是因为我用来尝试在查询中使用函数参数的语法。有什么想法吗?

【问题讨论】:

为什么要在函数外返回$result 如果你使用 laravel,你为什么要使用 RAW sql 查询?那么使用框架有什么意义呢。我建议你使用雄辩的。这里是官方文档laravel.com/docs/5.6/eloquent关于如何使用so 【参考方案1】:

您确定第一个工作正常吗?因为你有语法错误。

public function grabList(int $id)


    $sql = "
        SELECT *
        FROM schemaTest.List L
          INNER JOIN schemaTest.user u
            ON l.user_id = u.ID
        WHERE u.ID = $id 
          ";
 // <-- remove this, that would end the function block
// thus causing the error here, unexpected `$result`
     $result = DB::connection('odbc')->select(DB::raw($sql));
      return $result;


【讨论】:

谢谢你,我不知何故错过了。所以现在页面确实再次加载,但现在仍然有结果。如果我复制查询并使用数字而不是变量手动运行它,它会返回结果【参考方案2】:

试试这个

public function grabList(int $id)
    

        $sql = "
            SELECT *
            FROM schemaTest.List L
            INNER JOIN schemaTest.user u
            ON l.user_id = u.ID
            WHERE u.ID = :uid ";

          $result = DB::connection('odbc')->select(DB::raw($sql),['uid' => $id]);
          return $result;

    

【讨论】:

【参考方案3】:

为什么你使用像核心这样的语法。使用 laravel synatx 进行查询 如果您使用第二个数据库,请在 .env 和 config>database.php

中定义

使用链接http://fideloper.com/laravel-multiple-database-connections

【讨论】:

***.com/questions/31847054/… 但这并不能解释为什么没有 where 子句的一行查询工作得很好 use has use List L INNER JOIN schemaTest.user u ON l.user_id = u.ID 这里l是小写字母,和大写L一样【参考方案4】:

我不是 100% 确定您是如何传递 $id 的,但也许您需要 SQL 查询中的引号?

WHERE u.ID = '$id'

【讨论】:

【参考方案5】:

只看大括号的数量,它不会解析。您有两个右大括号和一个左大括号,这意味着 $result 不包含在函数中。因此Parse error: syntax error, unexpected '$result'. Jignesh Joisar 刚才输入了正确的方法。

【讨论】:

以上是关于将函数参数传递给 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

将Array参数传递给SQLiteObject.executeSql()

Delphi:如何将列表作为参数传递给SQL查询?

通过 url 将参数传递给 sql server 报告服务

如何将参数传递给 PhoneGap 数据库事务函数

使用 PHP PDO 将参数传递给 SQL Server 存储过程

将参数传递给子节点解析器函数