我正在尝试运行以下命令:
$driverID = 123;
$query = 'SELECT
*
FROM cars
WHERE JSON_CONTAINS(`data`, \'{"drivers": [{"driverID": ":driverID"}]}\');';
$statement = $db->prepare($query);
$statement->bindParam(':driverID', $driverID);
$result = $statement->execute();
但是,它总是导致空匹配。删除参数并直接输入值就可以了。
我怀疑报价有问题,但我不太明白-我需要修改什么才能让它工作?
1条答案
按热度按时间eaf3rand1#
不能将参数占位符放在字符串分隔符内。
错误:
正确的:
一个好的解决方法是在应用程序代码中构建json字符串,然后将整个json字符串绑定到参数。
使用
json_encode()
是确保数据采用有效json格式的好方法。它可以保护您避免意外的语法错误。在这里可以看到一个非常类似的例子(尽管对于postgresql):rails activerecord:如何在jsonb上使用带双引号的绑定变量