首页 > 解决方案 > 如何从 Array 中的数据库 WHRE 中进行选择

问题描述

我需要进行一个包含多个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数据库。有任何想法吗?

标签: phpsqltarantool

解决方案


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

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);

推荐阅读