Какъв е ZF2 еквивалентът на метода quoteInto() на ZF1?

В 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