Zend 2 избегает одиночной кавычки - PullRequest
0 голосов
/ 15 апреля 2020

Я использую Zend Framework 2 для генерации следующего экранированного запроса в одну кавычку SQL,

SELECT
    `document`.*
FROM
    `document`
WHERE
    (
        `document`.`document_taxon` LIKE '%Men\'s Health %' --escaped quote
        AND `document`.`document_source_id` = ' 5 '
        AND `document`.`document_published` = ' 1 '
        AND `document`.`document_deleted` = ' 0 '
    )
ORDER BY
    `document_id` DESC
LIMIT 25 OFFSET 0

Но вместо этого я получаю

SELECT
    `document`.*
FROM
    `document`
WHERE
    (
        `document`.`document_taxon` LIKE '%Men's Health%'
        AND `document`.`document_source_id` = ' 5 '
        AND `document`.`document_published` = ' 1 '
        AND `document`.`document_deleted` = ' 0 '
    )
ORDER BY
    `document_id` DESC
LIMIT 25 OFFSET 0

И вот мой код

class DocumentTable extends TableGateway
{
    ....
    $select=$this->getSql()->select();                                                                                 
    $select->columns(array('*'));
    $select->where
        ->NEST
        ->like('document_taxon', '%' . $label . '%')
        ->and
        ->equalTo('document_source_id', $sourceId)
        ->and
        ->equalTo('document_published', true)
        ->and
        ->equalTo('document_deleted', 0)
        ->UNNEST;

    $select->order('document_id DESC');
    $select->limit($limit);
    $select->offset($offset);
    ...
}

я пробовал,

  • $this->getAdapter()->getPlatform()->quoteValue($string)
  • \Zend\Db\Sql\Expression("%". $label . "%")
  • str_replace("'", "\'", $label)

Но мне не повезло. Я приветствую любые предложения по решению этой проблемы.

1 Ответ

0 голосов
/ 15 апреля 2020

Я разобрался. Я передавал нормализованное значение «метки» вместо необработанного значения. Приведенный выше фрагмент кода работает нормально.

...