php - 将 MySQL JSON_OBJECT() 与参数化查询一起使用
问题描述
我试图使用以下查询向 MySQL 表中插入一个条目。如果我将 MySQL 参数化查询与 mysqli 一起使用,如下所示,它可以正常工作。
insert into notelist(checksum,details,status,location) values('$checksum',JSON_OBJECT('filename','$filename','checksum','$checksum'),0,'$path')
但是,如果我使用下面的 mysqli 参数化查询,则会将错误“无法从具有 CHARACTER SET 'binary' 的字符串创建 JSON 值”放入调试文件中。请有人帮忙解决这个问题。
$stmt = $con->prepare("insert into notelist(checksum,details,status,location) values(?,?,?,?)");
$stmt->bind_param("sbis", $checksum, $a = "JSON_OBJECT('filename','$filename','checksum','$checksum')", $b = 0, $path);
$result = $stmt->execute();
if (false === $result) {
file_put_contents("db.txt", "connecterror" . $stmt->error);
}
解决方案
绑定时,您只想绑定值,而不是 SQL 函数、列或表。绑定引用该值并转义所有其他引号。您的查询应该是:
insert into notelist(checksum,details,status,location) values(?,JSON_OBJECT('filename',?,'checksum',?),?,?)
然后您应该绑定将要绑定的 5 个值。
$stmt->bind_param("sssis", $checksum, $filename, $checksum, 0, $path);
如当前所写,您的查询将JSON_OBJECT
作为字符串包含:
'JSON_OBJECT(\'filename\',\'filename_VALUE\',\'checksum\',\'$checksum_VALUE\')'
推荐阅读
- javascript - 循环以减少 React 中的冗余
- python - 如何使用 libvlc 向视频播放器添加额外的音轨
- javascript - 选择不在元素内的文本
- zsh - zsh:算术扩展:'语法错误:预期操作数(错误标记为“1 + 1”)'
- python - “.replace”运算符不工作 Python
- android-studio - 待办事项列表:复选框激活列表中的每个成员
- arrays - 用尽所有 onTap 功能时无法显示对话框
- kubernetes - Kubeadm 替换节点
- java - 如何在sqlite数据库java中存储对象
- java - 如何对除 api 网关之外的所有人隐藏我的公共微服务?