我在这里有一个问题,我的代码是:
$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/