在Zend Framework 1中,有一个数据库适配器的quoteinto方法,可用于引用sql语句。
我想知道它在Zend Framework 2中的等价物吗?
答案 0 :(得分:6)
不幸的是,通过在ZF 2.0中引入新的quoteInto()
,删除了Zend\Db
方法。并且没有相同的行为具有完全相同的行为。
在ZF2中有quoteValue()
方法。此方法将一个值作为参数,然后引用该值,以便您可以安全地将其作为值放入SQL查询中。
但是,您可以使用quoteValue()
复制ZF1 quoteInto()
方法的行为。您只需从ZF1中获取quoteInto()
方法的代码,然后将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()
方法的平台。
答案 1 :(得分:3)
引用SQL语句是一种旧的且可能不安全的方法。您应该使用预防性语句,这些语句可以更好地防止SQL注入。我将使用其中一个PDO驱动程序listed here(取决于您的数据库)并按照下面的一些使用准备好的查询的示例。
答案 2 :(得分:0)
它仍在那里(有点),查看zf2 / library / Zend / Db / Adapter / Platform /your DB adapter
我在MySql variant找到了大约6种不同的quote()
方法。我认为quoteValue()
已经取代了我们已经习惯的默认quoteInto()
。
[修改强>]
Using the platform object会提供一些方向,但我认为大多数时候新的SQL类只会使用平台api为我们做引用。
我自己也开始了解这一点,所以我不确定任何事情。