我正在完成学校作业并且我们正在进行搜索功能,但我一直在弄乱它。可能是简单的事情。所以,我的数据库连接运行良好,$ input部分都很好 - 它从搜索表单中获取输入。
这是相关的代码段:
require('db.php');
$input = $_POST['search_input'];
$sql = "SELECT * from 'question' WHERE 'q_text' LIKE '%".$input."%'";
$query = mysqli_query($conn, $sql);
while ($row = $query->fetch_assoc())
{
echo $row['q_text'];
}
我得到的错误信息是:
致命错误:在布尔值上调用成员函数fetch_assoc() 第9行。
为什么我得到一个布尔值?
答案 0 :(得分:2)
PHP docs表示如果出现错误,mysqli_query
会返回FALSE
。那么也许您的查询有一个错误,如不存在的列名?
查看您的查询,为什么用'?包围列名和常量字符串?你不应该写得更好吗??
$sql = "SELECT * from question WHERE q_text LIKE '%".$input."%'";
答案 1 :(得分:2)
如果未按预期返回true
或false
以外的值,则会显示布尔错误。
查询执行将为您提供true
布尔结果
$sql = "SELECT * from `question` WHERE `q_text` LIKE '%".$input."%'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
// echo your result
}
} else {
echo "0 results";
}
在上面的代码中:如果返回的行数多于零,函数fetch_assoc()
会将所有结果放入一个我们可以遍历的关联数组中。 while()
循环遍历结果集并输出数据
答案 2 :(得分:1)
也许$query
是假的。在"while"
点检$query
之前。
答案 3 :(得分:1)
你应该看错:
<?php
require('db.php');
$input = $_POST['search_input'];
$sql = "SELECT * from 'question' WHERE 'q_text' LIKE '%".$input."%'";
if ($result = mysqli_query($conn, $sql)) {
while ($row = mysqli_fetch_assoc($result)) {
var_export($row);
}
mysqli_free_result($result);
} else {
var_export(mysqli_error($conn));
}
mysqli_close($conn);
答案 4 :(得分:1)
您需要检查$query
包含的内容,如果它是布尔值,则查询失败,您需要查看mysqli_error的输出。
答案 5 :(得分:1)
确保您逃避输入!安全风险或可能会破坏您的查询。
require('db.php');
$input = $_POST['search_input'];
$sql = "SELECT * from 'question' WHERE 'q_text' LIKE '%".$conn->real_escape_string($input)."%'";
$query = $conn->query($sql);
if (!$query) {
printf("Error: %s\n", $conn->error);
}
while ($row = $query->fetch_assoc()) {
echo $row['q_text'];
}