为什么教义的Param_str_array转换无法正常工作?

时间:2019-01-30 04:52:32

标签: 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;

,我要传递给in条件的数组是(我从参数列表中打印了该数组,并在此处复制了它。)

$business = Array ( 0 => 'mobile', 1 => 'iot' );

该学说给我的错误是:

  

在处理过程中引发了异常:以参数“ [[“” mobile“,” iot“]]执行bu WHERE bu.ID IN(:business)的SELECT bu.ID,bu.BUSINESS_NAME FROM业务时发生了异常:”

  注意:数组到字符串的转换

我注意到数组未正确转换。我已经引用了以下链接,但没有任何帮助。

Stackoverflowlink1 Stackoverflowlink2 Doctrinelink1

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

1 个答案:

答案 0 :(得分:0)

根据official documentation,是因为

  

参数列表支持仅适用于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)
);