将函数参数传递给sql查询

时间:2018-09-07 04:56:22

标签: php sql laravel

我在这里有一个奇怪的问题。我正在将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;

  }

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

5 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分: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 = :uid ";

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

    }

答案 2 :(得分:0)

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

中定义

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

答案 3 :(得分:0)

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

WHERE u.ID = '{$id}'

答案 4 :(得分:0)

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