2

我需要进行一个包含多个WHERE条件的数据库查询。

问题是我无法正确地将$messages数组传递给请求。

public function Controller(Request $request)
    {
        $firstDate = $request->input('start');
        $secondDate = $request->input('end');
        $messages = $request->input('messages');
        $data = $this->client->executeQuery( "SELECT sum('count') as 'var', 'firstname', 'surname' FROM 'table' WHERE 'surname' IN (?) AND 'time' BETWEEN ? AND ? group by 'surname' ORDER BY 'var' desc limit 10",
            [$messages, $startDate, $endDate]);
        $data = $data ->getData();

        return response()->json($data);
    }

但结果,我得到了一个错误:

消息:“不支持参数 1 的绑定值类型数组”

我使用tarantool数据库。有任何想法吗?

4

3 回答 3

1

首先,你的语法不正确,应该是

executeQuery('...', $messages, $startDate, $endDate);

代替

executeQuery('...', [$messages, $startDate, $endDate]);

(请注意[]您的版本中的冗余)。

其次,如果我正确理解您的问题,您需要展开$messages数组并将每个值作为单独的参数传递给executeQuery(). 此外,您需要动态构造 SQL 语句,其中包含与数组大小一样多IN()$message占位符。像这样的东西:

$placeholders = rtrim(str_repeat('?,', count($messages)), ',');
$params = $messages;
$params[] = $startDate;
$params[] = $endDate;

$sql = "... IN ($placeholders) AND 'time' BETWEEN ? AND ? ...";
$result = $this->client->executeQuery($sql, ...$params);
于 2020-03-17T23:51:06.610 回答
0

SQL 现在不支持数组,因此您不能绑定数组类型的值(正是错误消息所说的)。您可以通过订阅相应的问题来跟踪支持此功能的进度:https ://github.com/tarantool/tarantool/issues/4762

于 2020-03-16T14:02:23.250 回答
0

尝试这个

$messages = $request->input('messages');
$messages = implode(',',$messages);

然后你的代码

于 2020-03-16T14:09:38.767 回答