【发布时间】:2020-12-29 10:46:55
【问题描述】:
如果显示一个字符,我正在编写一个子查询来显示日记中的某些信息。这是我的功能。
function getcharacterstories($con, $characterid) {
$id = '"'.$characterid.'"';
$sql = "SELECT dtr_entries.entreetitle,
dtr_entries.entreeinternallink,
dtr_entries.entreetimestamp
FROM dtr_entries
WHERE JSON_CONTAINS(entreeattachments, ?, '$.character')
AND dtr_entries.entreetype = 3";
$stmt = mysqli_prepare($con, $sql);
if(!$con->connect_errno) {
$stmt = mysqli_prepare($con, $sql);
if ($stmt) {
if (!empty($characterid)) {
mysqli_stmt_bind_param($stmt, 'i' , $id);
}
// shoot it all to the database
if(!mysqli_stmt_execute($stmt)) {
echo "error in following query:". $sql;
echo 'stmt error: '.mysqli_stmt_error($stmt);
} else {
mysqli_stmt_bind_result($stmt, $title, $link, $timestamp);
while (mysqli_stmt_fetch($stmt)){
echo $title;
}
mysqli_stmt_close($stmt);
}
} else {
pre($con);
echo $sql;
die('mysqli error: '.mysqli_error($con));
}
} else {
die( 'connect error: '.mysqli_connect_error() );
}
}
本身的代码是正确的,但返回空(从来没有错误)。当我在 phpmyadmin 的 sql 面板中使用数字运行此命令并在 json 包含的值周围使用双引号时,我实际上得到了结果,因此我将 characterid 重新格式化为 id,但仍然没有结果。
phpmyadmin 中产生结果的查询如下。
SELECT dtr_entries.entreetitle, dtr_entries.entreeinternallink, dtr_entries.entreetimestamp FROM dtr_entries WHERE JSON_CONTAINS(entreeattachments, '"1"', '$.character') AND dtr_entries.entreetype = 3
存储在列 entreeattachments 中的数据如下
{"character":"1","updated-by":"Lazarus","update-time":1599124101}
我做错了什么,我该如何解决?
这是 10.2.27 MariaDB。
【问题讨论】:
-
1.在开发新代码时打开/打开
error_reporting,这样您就可以实际看到错误消息。 2. 错误消息可能表明您需要转义该$,因为它位于双引号字符串中。 -
@Sammitch 错误报告已开启。在我的所有文件中,我打开了用于记录的 ini 命令,如果语句 sql 查询包含错误,我会以错误的形式返回结果。因此所有的检查。此外,错误日志是空的。
-
你用的是Mysql还是MariaDB的哪个数据库?
-
@VishalSheth 10.2.27 MariaDB。查看主要信息
标签: php sql json mariadb prepared-statement