【问题标题】:Using MySQL JSON_OBJECT() with Parameterized query将 MySQL JSON_OBJECT() 与参数化查询一起使用
【发布时间】:2019-01-25 23:41:42
【问题描述】:

我正在尝试使用以下查询向 MySQL 表插入一个条目。如果我将 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);
}

【问题讨论】:

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


    【解决方案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\')'
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2014-08-18
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2021-09-29
    相关资源
    最近更新 更多