我试图在我的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_ARRAY
和PARAM_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.']';
}
工作正常,但我认为它不是很优雅。
如何通过我的方法将数组发送到存储过程?