将MySQL JSON_OBJECT()与参数化查询一起使用

时间:2018-08-19 18:28:50

标签: php mysql mysqli prepared-statement mysql-json

我试图使用以下查询在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);
}

1 个答案:

答案 0 :(得分:1)

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