使用PHP

时间:2015-05-28 09:01:36

标签: php mysql sql mysqli

我正在完成学校作业并且我们正在进行搜索功能,但我一直在弄乱它。可能是简单的事情。所以,我的数据库连接运行良好,$ 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行。

为什么我得到一个布尔值?

6 个答案:

答案 0 :(得分:2)

PHP docs表示如果出现错误,mysqli_query会返回FALSE。那么也许您的查询有一个错误,如不存在的列名?

查看您的查询,为什么用'?包围列名和常量字符串?你不应该写得更好吗??

$sql = "SELECT * from question WHERE q_text LIKE '%".$input."%'";

答案 1 :(得分:2)

如果未按预期返回truefalse以外的值,则会显示布尔错误。

查询执行将为您提供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'];
}