什么是ZF1的quoteInto()方法的ZF2等价物?

时间:2013-01-04 11:59:40

标签: php zend-framework2 quote

在Zend Framework 1中,有一个数据库适配器的quoteinto方法,可用于引用sql语句。

我想知道它在Zend Framework 2中的等价物吗?

3 个答案:

答案 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为我们做引用。 我自己也开始了解这一点,所以我不确定任何事情。