0

我需要这样查询:

SELECT p.pid, p.url FROM products as p WHERE url_crc IN (FNV_64("http://url1.com/"),FNV_64("http://url2.com/"))

我需要对每个数组变量使用 FNV_64 哈希函数。在将变量传递给查询生成器之前,我不能进行散列。此哈希函数仅可作为 MySQL 扩展使用。

我怎样才能使用 Symfony2 做到这一点?例如,使用:

$qb = $em->createQueryBuilder();
$query = $qb->select('p.pid')
            ->from('SRC\MainBundle\Entity\Product', 'p')
            ->where('p.url_crc IN (FNV_64(:urls))') // error HERE
            ->setParameter('urls', $hashes_array)
            ->getQuery();

行不通。我能做到的唯一方法是:

$query = $em->createNativeQuery('SELECT p.pid, p.url FROM products as p
                                WHERE url_crc IN (' . join(',', $tmp_array) . ')', $rsm);

tmp_array 看起来像这样:

Array
(
    [0] => FNV_64("http://url1.com/")
    [1] => FNV_64("http://url2.com/")
)

有没有更好的办法?

4

1 回答 1

1

您始终可以绕过 DQL。但是,Doctrine2 旨在支持各种数据库引擎,并允许您在 DQL 中添加“供应商特定的 SQL 功能”。您可以阅读此链接以了解如何编写代码以支持您的 mysql 扩展。还有一个指向 github 存储库的链接,其中包含许多扩展,您可以查看示例。

另一件事——我在这里找到了至少一个 FNV 哈希的 php 实现

于 2012-07-26T01:10:07.167 回答