7

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

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

4

3 回答 3

7

不幸的是,随着ZF 2.0quoteInto()中新方法的引入,该方法被删除。Zend\Db并且没有具有完全相同行为的等价物。

ZF2中有quoteValue()方法。此方法将一个值作为参数,然后将该值引用,以便您可以安全地将其作为值放入 SQL 查询中。

但是,您可以使用quoteValue()来复制 ZF1quoteInto()方法的行为。您可以简单地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()

于 2013-01-13T22:24:38.753 回答
3

引用 SQL 语句是旧的且可能不安全的方法。您应该使用对 SQL 注入有更好保护的准备好的语句。我将使用此处列出的 PDO 驱动程序之一(取决于您的数据库),并按照下面的一些示例使用准备好的查询。

于 2013-01-14T21:35:29.573 回答
0

它还在那里(有点),看看我在MySql 变体zf2 / library / Zend / Db / Adapter / Platform /your DB adapter中发现了大约 6 种不同quote()的方法。然而,我认为这已经取代了我们都习惯的默认设置。quoteValue()quoteInto()

[编辑]
使用平台对象将提供一些方向,但我认为大多数时候新的SQL类将只使用平台 api 为我们做引用。我自己仍然对此有所了解,所以我对任何事情都不确定。

于 2013-01-04T12:16:41.143 回答