繁体   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