如何在MySQLJSON_CONTAINS中使用PDO bindParam?
How to use PDO bindParam inside MySQL JSON_CONTAINS?
我正在尝试将以下内容发送给 运行:
$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 字符串绑定到参数。
$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):
我正在尝试将以下内容发送给 运行:
$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 字符串绑定到参数。
$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):