Просмотр поста

.
Blade
The Frontend-Warrior

Пишу поиск на сайте через mysqli.

Код1 (+/-)

if(isset($_POST['phrase']) && $_POST['phrase'] != ''){
    $search = '%'.$_POST['phrase'].'%';
    if($stmt = $db->prepare("SELECT id, name FROM lectors WHERE name LIKE ?")){
        $stmt->bind_param('s', $search);
        $stmt->execute();
        $stmt->bind_result($id, $name);

        if($stmt->num_rows > 0){
            while($stmt->fetch()){
                echo $id . ' ' . $name . '<br />';
            }
        }else{
            echo 'Ничего не найдено';
        }
    }else{
        echo mysqli_error($db);
    }
}

Выводит "ничего не найдено", хотя должно вывести 2 строки.
Если же запрос прописать вот так
Код2 (+/-)
if(isset($_POST['phrase']) && $_POST['phrase'] != ''){
    $search = $_POST['phrase'];
    if($stmt = $db->prepare("SELECT id, name FROM lectors WHERE name LIKE '%?%'")){
        $stmt->bind_param('s', $search);
        $stmt->execute();
        $stmt->bind_result($id, $name);

        if($stmt->num_rows > 0){
            while($stmt->fetch()){
                echo $id . ' ' . $name . '<br />';
            }
        }else{
            echo 'Ничего не найдено';
        }
        $stmt->close();
    }else{
        echo mysqli_error($db);
    }
}

то выскакивает ошибка
Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in D:\workspace\web\php\site.dev\search.php on line 17

Как правильно сделать запрос через LIKE в mysqli?