[英]Prepared SQL LIKE statement not returning all results
我有一個搜索我的成分數據庫的功能(為清楚起見刪除了錯誤報告):
$servername = "localhost";
$username = "root";
$password = "*****";
$dbname = "addb_db";
$query = "%" . $_POST["query"] ."%";
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT id, name FROM addb_ingredients WHERE name LIKE ? or id like ?";
$stmt = $conn -> prepare($sql)
$stmt->bind_param('ss', $query,$query)
$stmt->execute()
$stmt->bind_result($id,$name)
while ($stmt->fetch()) {
$ing_array[] = array($id,$name);
}
$response_array["status"] = "success";
$response_array["data"] = $ing_array;
echo json_encode($response_array);
$stmt->close();
$conn->close();
這僅返回特定查詢的部分結果,例如“ bi”,這些是返回的結果:
但是,當輸入“ bit”時,上面的php的結果是:
結果應該是:
“苦澀”的結果被排除在外,我不知道為什么。
我對PHP並不是特別強壯,但是我注意到,如果使用'%bit%'
作為參數,則'Bitter'
將是第一個結果。 同樣,將'%bi%'
用作參數時, 'Absolut Hibiskus'
應該是第一個結果。
我的猜測是,第一個結果是在此代碼塊中使用的,而沒有實際分配給$ing_array
任何位置:
$stmt->bind_result($id,$name)
while ($stmt->fetch()) {
$ing_array[] = array($id,$name);
}
完全表明,沒有提供實際輸出的屏幕截圖。 表示OP正在根據遙遠的間接結果來判斷其准備好的語句輸出。 像客戶端上的一些處理。
在准備好的語句或LIKE語句中,沒有任何錯誤負責這種行為。 報告的同類錯誤的100%是由用戶域代碼引起的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.