gpt4 book ai didi

mysql - 如何在 MySQL JSON_CONTAINS 中使用 PDO bindParam?

转载 作者:行者123 更新时间:2023-11-30 21:40:02 28 4
gpt4 key购买 nike

我正在尝试运行以下程序:

$driverID = 123; 

$query = 'SELECT
*
FROM cars
WHERE JSON_CONTAINS(`data`, \'{"drivers": [{"driverID": ":driverID"}]}\');';

$statement = $db->prepare($query);
$statement->bindParam(':driverID', $driverID);
$result = $statement->execute();

但是,它始终会导致空匹配。删除参数并直接输入值可以正常工作。

我怀疑引号有问题,但我不太明白 - 我需要修改什么才能使其正常工作?

最佳答案

您永远不能将参数占位符放在字符串定界符内。

错误:

SELECT * FROM MyTable WHERE mycolumn = ':param'

右:

SELECT * FROM MyTable WHERE mycolumn = :param

一个好的解决方法是在您的应用程序代码中构建 JSON 字符串,然后将整个 JSON 字符串绑定(bind)到参数。

$driverID = 123; 
$obj = ['drivers' => [['driverId' => $driverID]]];
$json = json_encode($obj);

$query = 'SELECT
*
FROM cars
WHERE JSON_CONTAINS(`data`, :json);';

$statement = $db->prepare($query);
$result = $statement->execute(['json'=>$json]);

使用 json_encode() 是确保数据采用有效 JSON 格式的好方法。它可以防止您犯意外的语法错误。

在此处查看一个非常相似的案例(虽然是针对 PostgreSQL 的):Rails ActiveRecord: How to use bind variables with double quotes on jsonb

关于mysql - 如何在 MySQL JSON_CONTAINS 中使用 PDO bindParam?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52066131/

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