为什么 Doctrine Param_str_array 转换没有按预期工作?

Kir*_*ran 1 php symfony doctrine-orm symfony-2.1

我正在尝试将字符串数组绑定到 where-in 条件中。我也使用了参数转换常量。但它似乎不起作用。

以下是我的查询。

$buQuery = "SELECT bu.ID, bu.BUSINESS_NAME FROM business as bu WHERE bu.ID IN (:business)";

$buStmt = self::getConnection($this->entityManager)->prepare($buQuery);

$buStmt->bindValue("business", $business, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);

$buStmt->execute();

$responseData = $buStmt->fetch();

return $responseData;
Run Code Online (Sandbox Code Playgroud)

我为 in 条件传递的数组是(我已从参数列表中打印了该数组并将其复制到此处。)

$business = Array ( 0 => 'mobile', 1 => 'iot' );
Run Code Online (Sandbox Code Playgroud)

该学说给我带来的错误是:

处理时抛出异常:执行 SELECT bu.ID, bu.BUSINESS_NAME FROMbusiness as bu WHERE bu.ID IN (:business) with params "[["mobile","iot"]]:" 时发生

异常:数组到字符串的转换

我注意到数组没有正确转换。我参考了以下链接,但没有任何帮助。

Stackoverflowlink1 Stackoverflowlink2 Doctrinelink1

注意:我也使用了“PARAM_INT_ARRAY”。我还在绑定语句中将数组作为参数传递时尝试了“array_values”。

DrK*_*Key 5

根据官方文档,这是因为

参数列表支持仅适用于 Doctrine\DBAL\Connection::executeQuery() 和 Doctrine\DBAL\Connection::executeUpdate(),不适用于准备好的语句的绑定方法。

因此,在您的情况下,您只能使用这些函数来绑定数组

$stmt = $conn->executeQuery(
    'SELECT bu.ID, bu.BUSINESS_NAME FROM business as bu WHERE bu.ID IN (?)',
    array($business),
    array(\Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
);
Run Code Online (Sandbox Code Playgroud)