如何在使用原理的Postgresql存储过程中将PHP数组用作参数?

时间:2019-04-29 14:51:56

标签: postgresql symfony doctrine

我试图在我的Symfony应用程序的存储过程中使用php数组作为参数。

但是我在学说上找不到任何东西。

我的postgresql数据库中有一个存储过程,其中使用两个数组作为参数:

CREATE OR REPLACE FUNCTION myschema."deleteHashes" (
  additions text [],
  deletions integer []
)

在这样的sql查询中调用它很容易:

select "deleteHashes"(ARRAY['foo', 'bar'], ARRAY[1, 2, 3]);

在构建查询时在主义中使用PARAM_STR_ARRAYPARAM_INT_ARRAY常量会喷溅数组,这不是我想要的:

        $sql = 'select "deleteHashes"(:additions , :deletions)';
        $this->getEntityManager()->getConnection()->executeQuery(
            $sql,
            [
                'additions' => $additions,
                'deletions' => $deletions,
            ],
            [
                'additions' => Connection::PARAM_STR_ARRAY,
                'deletions' => Connection::PARAM_INT_ARRAY,
            ]
        );

如果我在php中生成完整的SQL字符串,我有一个可行的解决方案:

        $sql = 'select "deleteHashes"('.
            $this->arrayToSql($additions, self::STR).', '.
            $this->arrayToSql($deletions, self::INT).")";
private function arrayToSql($stringArray, $type)
    {
        $returnString = 'ARRAY[';

        if ($type === self::STR) {
            $stringArray = array_map(function ($data) {
                return "'".$data."'";
            }, $stringArray);
        }

        $returnString = $returnString . implode(', ', $stringArray);
        return $returnString.']';
    }

工作正常,但我认为它不是很优雅。

如何通过我的方法将数组发送到存储过程?

0 个答案:

没有答案