В 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