我正在編寫一個子查詢,以在顯示字符時顯示日記中的某些信息。這是我的功能。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); } } 代碼本身是正確的,但返回空(沒有任何錯誤)。當我在 phpmyadmin 的 sql 面板中使用數字運行此命令,并且我在 json contains 中的值周圍使用雙引號時,我實際上得到了結果,因此我將其重新格式化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}我做錯了什么以及如何解決這個問題?順便說一句,這是 MariaDB 10.2.27。
1 回答

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
問題
最初$characterid
可能是一個整數,但你可以在這里更改它:
$id = '"'.$characterid.'"';
因此,這里可能無法成功綁定為整數:
mysqli_stmt_bind_param($stmt, 'i' , $id);
可能的解決方案
方法一
您可以考慮確保綁定為字符串,如下所示
mysqli_stmt_bind_param($stmt, 's' , $id);
最好確保$characterid
確實是一個整數,例如。
$id = '"'.intval($characterid).'"';
方法2
或更新您的 sql 以按預期引用參數:
$sql = "SELECT dtr_entries.entreetitle, dtr_entries.entreeinternallink, dtr_entries.entreetimestamp FROM dtr_entries WHERE JSON_CONTAINS(entreeattachments, '\"?\"', '$.character') AND dtr_entries.entreetype = 3";
并使用
$id = $characterid;
其他資源
確定綁定期間是否出現錯誤 - https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
- 1 回答
- 0 關注
- 167 瀏覽
添加回答
舉報
0/150
提交
取消