我在这里有一个问题,我的代码是:

$query = $con2->createQueryBuilder()->select('*')
                ->from('`blog_entry`', 'p')
                ->where('WHERE url->"$.?" = ?')
                ->setParameter(0, $request->getLocale())
                ->setParameter(1, $entryUrl);


url字段是一个JSON字段,它包含以下内容:
{“ es”:“ url.html”}

但是出现下一个错误:

SQLSTATE [HY093]:无效的参数编号:绑定变量的数量与令牌的数量不匹配

我认为url->“ $。?”的部分是错误,但我不知道如何在此处传递参数,有什么想法吗?

最佳答案

您不能像这样绑定到JSON路径。从manual


  参数标记只能用于应该显示数据值的位置,而不能用于SQL关键字,标识符等。


您将需要更改where()调用以改为包含路径,并删除该参数值:

$query = $con2->createQueryBuilder()->select('*')
                ->from('`blog_entry`', 'p')
                ->where('WHERE url->"$.' . $request->getLocale() . '" = ?')
                ->setParameter(0, $entryUrl);


更新资料

受FMK的启发,我在自己的服务器上做了一些测试,发现它可以工作:

$query = $con2->createQueryBuilder()->select('*')
                ->from('`blog_entry`', 'p')
                ->where('WHERE JSON_EXTRACT(url, ?) = ?')
                ->setParameter(0, '"$.' . $request->getLocale() . '"')
                ->setParameter(1, $entryUrl);

关于php - PHP查询:将参数设置为用于JSON搜索的Sql键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56019204/

10-11 23:26
查看更多