PHP 查询:将参数设置为 Sql 键以进行 JSON 搜索
PHP Query: Set parameter to an Sql key for JSON search
我这里有问题,我的代码是:
$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->"$.?"这部分是错误的,但我不知道如何在那里传递参数,有什么想法吗?
你有没有尝试过这样的事情:
WHERE JSON_EXTRACT('url','$.?') = '?'
你不能像那样绑定到 JSON 路径。来自 manual:
Parameter markers can be used only where data values should appear, not for SQL keywords, identifiers, and so forth.
您需要更改 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);
我这里有问题,我的代码是:
$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->"$.?"这部分是错误的,但我不知道如何在那里传递参数,有什么想法吗?
你有没有尝试过这样的事情:
WHERE JSON_EXTRACT('url','$.?') = '?'
你不能像那样绑定到 JSON 路径。来自 manual:
Parameter markers can be used only where data values should appear, not for SQL keywords, identifiers, and so forth.
您需要更改 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);