Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在参数化查询中使用MySQL JSON_OBJECT()_Php_Mysql_Mysqli_Prepared Statement_Mysql Json - Fatal编程技术网

Php 在参数化查询中使用MySQL JSON_OBJECT()

Php 在参数化查询中使用MySQL JSON_OBJECT(),php,mysql,mysqli,prepared-statement,mysql-json,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中使用参数化查询(如下所示),错误“无法从字符集为“binary

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

insert into notelist(checksum,details,status,location) values('$checksum',JSON_OBJECT('filename','$filename','checksum','$checksum'),0,'$path')
但是,如果我在mysqli中使用参数化查询(如下所示),错误“无法从字符集为“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_对象作为字符串,其中包含:

'JSON_OBJECT(\'filename\',\'filename_VALUE\',\'checksum\',\'$checksum_VALUE\')'

太好了,如果是那样的话,请接受答案。