Что такое ZF2-эквивалент ZF1-метода quoteInto()?

В Zend Framework 1 есть метод quoteinto для адаптера базы данных, который можно использовать для цитирования операторов sql.

Я хотел бы знать его эквивалент в Zend Framework 2?


person rahim asgari    schedule 04.01.2013    source источник


Ответы (3)


К сожалению, метод quoteInto() был удален с введением нового Zend\Db в ZF 2.0. И нет эквивалента с точно таким же поведением.

В ZF2 есть метод quoteValue(). Этот метод принимает одно значение в качестве параметра, а затем заключает значение в кавычки, чтобы вы могли безопасно поместить его в SQL-запрос в качестве значения.

Однако вы можете использовать quoteValue() для воспроизведения поведения метода ZF1 quoteInto(). Вы можете просто взять код метода quoteInto() из ZF1 и примените к нему метод quoteValue() из объекта платформы в ZF2:

// modified quoteInto() function for ZF2
function quoteInto($text, $value, $platform, $count = null)
{
    if ($count === null) {
        return str_replace('?', $platform->quoteValue($value), $text);
    } else {
        while ($count > 0) {
            if (strpos($text, '?') !== false) {
                $text = substr_replace($text, $platform->quoteValue($value), strpos($text, '?'), 1);
            }
            --$count;
        }
        return $text;
    }
}

Есть некоторые отличия. ZF1 имеет параметр $type, но из-за того, как ZF2 работает с этими вещами, параметр типа не имеет особого смысла. И есть параметр $platform, потому что этот метод имеет зависимость от платформы для метода quoteValue().

person kokx    schedule 13.01.2013

Цитирование оператора SQL — старый и потенциально небезопасный способ сделать это. Вы должны использовать подготовленные операторы, которые имеют гораздо лучшую защиту от SQL-инъекций. Я бы использовал один из драйверов PDO, перечисленных здесь (в зависимости от вашей базы данных) и следуйте приведенным ниже примерам, в которых используются подготовленные запросы.

person zuallauz    schedule 14.01.2013

он все еще там (вроде как), проверьте zf2 / library / Zend / Db / Adapter / Platform /your DB adapter Я нашел около 6 различных quote() методов, доступных в вариант MySql. Однако я думаю, что quoteValue() заменило quoteInto() по умолчанию, к которому мы все привыкли.

[ИЗМЕНИТЬ]
Использование объекта платформы даст некоторое направление, но я думаю, что в большинстве случаев новый SQL классы будут просто использовать API платформы для цитирования для нас. Я все еще узнаю это сам, поэтому я не совсем уверен ни в чем.

person RockyFord    schedule 04.01.2013
comment
quoteInto принимает два параметра: строку и замененное значение, а quoteValue принимает только 1 параметр. Как мне его использовать? - person rahim asgari; 04.01.2013