В Zend Framework 1 има метод quoteinto за адаптер на база данни, който може да се използва за цитиране на sql изрази.
Бих искал да знам неговия еквивалент в Zend Framework 2?
В Zend Framework 1 има метод quoteinto за адаптер на база данни, който може да се използва за цитиране на sql изрази.
Бих искал да знам неговия еквивалент в Zend Framework 2?
За съжаление, методът 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()
.
Цитирането на SQL оператор е старият и потенциално несигурен начин да го направите. Трябва да използвате подготвени изрази, които имат много по-добра защита срещу SQL инжектиране. Бих използвал един от PDO драйверите, изброени тук (в зависимост от вашата база данни) и следвайте някои от примерите по-долу, които използват подготвени заявки.
все още е там (донякъде), вижте zf2 / library / Zend / Db / Adapter / Platform /your DB adapter
Намерих около 6 различни quote()
метода, налични в Вариант на MySql. Мисля обаче, че quoteValue()
замени стандартното quoteInto()
, с което всички сме свикнали.
[РЕДАКТИРАНЕ]
Използването на обекта на платформата ще даде известна насока, но мисля, че през повечето време новият SQL класовете просто ще използват API на платформата, за да направят цитирането вместо нас. Аз самият все още се запознавам с това, така че не съм много сигурен в нищо.
quoteInto
приема два параметъра: низа и заменената стойност, но quoteValue
приема само 1 параметър. Как трябва да го използвам?
- person rahim asgari; 04.01.2013