gpt4 book ai didi

php - 你能在 Laravel Eloquent 中使用命名参数吗

转载 作者:搜寻专家 更新时间:2023-10-31 21:36:17 25 4
gpt4 key购买 nike

我使用 Oracle 作为数据库层,但问题是通过 OCI8 的 oracle(我制作了一个 PDO 用户空间驱动程序)仅支持 SQL 语句中的命名参数而不支持定位参数。 (比如使用多个?)

在基础上,它是 Laravel 的 Eloquent,它生成 SQL,但我找不到任何关于如何覆盖参数构造的文档。

我希望能够以“:name”的形式创建命名参数,而不是放置大量的“?”在整个查询过程中。

这能做到吗?我的猜测是它与数据库语法类有关...

最佳答案

哦,如果有人有更好的解决方案,请继续提交,或者告诉我我的临时解决方案可能有什么问题。我替换所有“?”使用“:autoparam”和参数增量创建“:autoparam0”、“:autoparam1”、“:autoparam2”等。

    //Replace ? with a pseudo named parameter
$newStatement = null;
$parameter = 0;
while($newStatement !== $statement)
{
if($newStatement !== null)
{
$statement = $newStatement;
}
$newStatement = preg_replace('/\?/', ':autoparam'.$parameter, $statement, 1);
$parameter++;
}
$statement = $newStatement;

然后,当我从 PDO 收到绑定(bind)参数的请求时,我检查参数是否为数字。在大多数语言中,据我所知,数字索引是无效的标识符,所以我可以安全地假设,至少对于我的 PDO 用户空间驱动程序,我可以用以下内容替换数字参数名称:

    //Replace the first @oci8param to a pseudo named parameter
if(is_numeric($parameter))
{
$parameter = ':autoparam'.$parameter;
}

它现在有效,我需要用 laravel 做更多的测试,看看问题是否出现在不同的分数上,但到目前为止,它似乎没问题......

关于php - 你能在 Laravel Eloquent 中使用命名参数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com