2016-11-14 5 views
3

У меня есть этот PHP кодПростая функция поиска возврат всегда найдено 0

if(isset($_POST['submit'])){ 

$likeString = '%' . $_POST['search'] . '%'; 
$query = $conn->prepare("SELECT * FROM images WHERE image_caption LIKE ?"); 
$query->bind_param('s', $likeString); 
$query->execute(); 

    var_dump($likeString); 
    if (!$query) { 
     printf("Query failed: %s\n", $mysqli->error); 
     exit; 
    } 
    if($res->num_rows > 0) { 
     while ($row = $res->fetch_assoc()) {   
      echo "<br>Title: " . $row['image_caption'];   
     } 
    } else { 
      echo " <br> 0 results"; 
    } 

} 

var_dump($likeString) показывает слово, которое я отправил через поисковую форму правильно. Также я пробовал в phpmyadmin непосредственно для запуска этого запроса

SELECT * FROM images WHERE image_caption LIKE "%Volvo%"

И я получил 1 результат, который является правильным. На странице я вижу 0 results. Пытался играть с извлечением:

$res->fetch_assoc() 
$res->fetchAll() 
$res->fetch() 

Ни один из них не показал никакого результата. Я уверен, что это очень глупая и простая ошибка, но я не вижу этого. Пожалуйста, помогите по этому поводу.

У меня нет Call to a member function bind_param() on a non-object Это была моя ошибка, в то время как я сделал предложенные изменения из одного из ответов. Проблема по-прежнему остается - 0 Результаты

UPDATE: Текущий код

$likeString = "%{$_POST['search']}%"; 
$query = $conn->prepare("SELECT * FROM images WHERE image_caption LIKE ? "); 
$query->bind_param('s', $likeString); 
$query->execute(); 

    if($query->num_rows > 0) { 
     while ($row = $query->fetch()) {   
      echo "<br>Title: " . $row['image_caption'];   
     } 
    } else { 
      echo " <br> 0 results"; 
    } 

} 

UPDATE 2: DB соединение checked-> результат Connected successfully

$servername = "localhost"; 
$username = "mydbUsername"; // it's changed for the question 
$password = "myPass"; // it's changed for the question 
$dbname = "myDbName"; // it's changed for the question 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 
echo "Connected successfully"; 
+0

Replcae эти две строки: $ запрос = $ conn-> (SELECT * FROM images WHERE image_caption LIKE% ". $ _ POST ['search']."% "); // $ query-> bind_param ('s', $ likeString); –

+0

Ошибка: 'Вызов функции-члена execute() для объекта, не являющегося объектом. – Jason

+0

. Var * $ res * не указан в вашем' $ res-> num_rows> 0' is * false * – varlogtim

ответ

4

попробовать это: (обновить код)

$likeString= "%{$_POST['search']}%"; 
$stmt = $db->prepare("SELECT * FROM images WHERE image_caption LIKE ?"); 
$stmt->bind_param('s', $likeString); 
$stmt->execute(); 

$result = $stmt->get_result(); 
    while ($row = $result->fetch_array(MYSQLI_NUM)) 
    { 
     foreach ($row as $r) 
     { 
      echo "<br>Title: " . $r['image_caption'];     
     } 
     print "\n"; 
    } 

ИЛИ

<?php 
    $conn = new mysqli("localhost","mydbUsername","myPass","myDbName"); 
    /* check connection */ 
    if ($conn->connect_errno) { 
    printf("Connect failed: %s\n", $conn->connect_error); 
    exit(); 
    } 

    $query = "SELECT * FROM images WHERE image_caption LIKE %".$_POST['search']."%"; 

    if ($result = $conn->query($query)) { 

    /* fetch associative array */ 
    while ($row = $result->fetch_assoc()) { 
     echo "<br> Title: ". $row["image_caption"]); 
    }print "\n"; 

    /* free result set */ 
    $result->free(); 
    } 

    /* close connection */ 
    $conn->close(); 
?> 
+0

, это должен быть этот '$ param' вместо этого' $ likeString'. –

+0

В чем разница? Только скобки на '$ _POST ['search']'? Еще нет результатов. – Jason

+0

попробуйте с обновлением, может быть, полезно (не очень уверен) –

5

Вы используете $res в то время как он не определен ... Вместо этого вы должны использовать $query. следующий раз включите сообщения об ошибках, чтобы увидеть такие глупые ошибки

+0

По-прежнему '0 результатов'. Я добавил 'error_reporting (E_ALL);' и 'error_reporting (0);' вверху .. ошибок нет – Jason

+0

error_reporting (0) блокирует отображение ошибок. Вы должны установить E_ALL и ini_set ('display_errors', 'On') – nospor

+0

Вы не получаете 0 результатов. У вас есть оператор if с условием, которое является ложным, потому что вы используете переменную '$ res', которая не имеет значения, тогда вы эхом получаете то, что у вас есть 0 результатов. – varlogtim