Почему преобразование Doctrine Param_str_array не работает должным образом? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь связать массив строк в условие where.Я также использовал константы преобразования параметров.Но, похоже, не работает.

Следующим является мой запрос.

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

Ошибка, которую доктрина выдает мне:

При обработке возникло исключение: возникла исключительная ситуация при выполнении SELECT bu.ID, bu.BUSINESS_NAME FROM business as buГДЕ bu.ID IN (: business) с параметрами "[[" mobile "," iot "]]:"Примечание: преобразование массива в строку

Я заметил, что массив не конвертируется должным образом.Я ссылался на следующие ссылки, но мне ничего не помогло.

Stackoverflowlink1 Stackoverflowlink2 Doctrinelink1

Примечание: Я также использовал «PARAM_INT_ARRAY».А также я попробовал "array_values" при передаче массива в качестве параметра в операторе bind.

1 Ответ

0 голосов
/ 30 января 2019

Согласно официальной документации , это потому, что

Поддержка списка параметров работает только с 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)
);
...