2015-05-28 2 views
2

Я занимаюсь школьным заданием, и мы должны выполнить функцию поиска, но я продолжаю испортить его. Наверное, что-то простое. Таким образом, мое соединение с базой данных работает хорошо, и входная часть $ хорошо - она ​​берет входные данные из формы поиска.Поисковый запрос с PHP

Это соответствующий фрагмент кода:

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']; 
} 

Сообщение об ошибке я получаю:

Fatal error: Call to a member function fetch_assoc() on boolean on line 9.

Почему я получаю логическое значение?

+3

Вы использовали '' 'вместо backticks'. Всегда ищите ошибки в запросе – Federkun

+0

удалите qoute в поле таблицы, используйте 'вместо –

ответ

2

PHP docs сказать, что mysqli_query возвращает FALSE в случае ошибки. Может быть, ваш запрос имеет ошибку, как несуществующее имя столбца?

Рассматривая ваш запрос, почему вы окружаете имена столбцов и константную строку с помощью? Разве вам лучше не писать ...?

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

, что было проблемой! он работал по вашему запросу. большое спасибо! –

1

Возможно, $query является ложным. До "while" проверить $query со счетом.

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() перебирает результирующий набор и выводит данные

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); 
1

Вы должны проверить, что $query содержит, если это логическое значение, то этот запрос не удался, и вы должны увидеть выход от mysqli_error.

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']; 
} 
Смежные вопросы