[英]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.