簡體   English   中英

准備好的SQL LIKE語句未返回所有結果

[英]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”,這些是返回的結果:

  • 野牛草味伏特加
  • 苦檸檬
  • 苦葯類,濃生啤酒
  • 芹菜苦酒
  • 芙蓉花茶
  • 巧克力苦味
  • 橙色苦味
  • 桃苦
  • 佩喬德的苦澀
  • 芥末醬

在phpMyAdmin上運行此查詢將返回相同的結果。

但是,當輸入“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM