我有一个搜索我的成分数据库的功能(为清楚起见,错误报告被删除):
$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”,这些是返回的结果:
Running this query on phpMyAdmin returns the same, as it should.
但是,当输入“bit”时,上面php的结果是:
结果应该是:
“苦涩”的结果被排除在外,我无法理解为什么。
答案 0 :(得分:0)
我对PHP并不是特别强,但我注意到'Bitter'
如果使用'%bit%'
作为参数,那将是第一个结果。同样,'Absolut Hibiskus'
应该是使用'%bi%'
作为参数时的第一个结果。
我的猜测是第一个结果是在这段代码中消耗的,而实际上没有在$ing_array
内的任何地方分配:
$stmt->bind_result($id,$name)
while ($stmt->fetch()) {
$ing_array[] = array($id,$name);
}
答案 1 :(得分:0)
相当具有指示性,没有提供实际输出的屏幕截图。意味着OP通过遥远的间接后果来判断他们准备好的陈述输出。就像客户端的一些处理一样。
在准备好的语句和负责此类行为的LIKE语句中都没有错误。 100%报告的同类错误是由用户区代码引起的。