使用mysql json_object()进行参数化查询

hyrbngr7  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(520)

我试图用下面的查询向mysql表插入一个条目,如果我用mysqli参数化查询,如下所示,它可以正常工作。

insert into notelist(checksum,details,status,location) values('$checksum',JSON_OBJECT('filename','$filename','checksum','$checksum'),0,'$path')

但是如果我像下面那样使用mysqli的参数化查询,错误“cannot create a json value from a string with character set‘binary’会被放入调试文件中。请有人帮助解决这个问题。

$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);
}
0sgqnhkj

0sgqnhkj1#

绑定时,您只希望绑定值,而不希望绑定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\')'

相关问题