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