MySqli LIKE-запрос не соответствует номеру параметра

Следующий запрос приводит к тому, что браузер печатает

"не соответствует количеству параметров"

тип ошибки.

Почему это происходит?

Когда я заменяю на LIKE '%".$country."%' и избавиться от bind_param это не вызывает никаких ошибок.

$query = "
SELECT * from (    
    SELECT link
    FROM items
    WHERE countries LIKE '%?%'
    ORDER BY value DESC
    LIMIT 10   
) T ORDER BY RAND() 
LIMIT 1
";
if ($statement = $mysqli->prepare($query))
{
    $statement->bind_param("s", $country);
    $statement->execute();
    $statement->store_result();
    $statement->bind_result($link);
    $statement->fetch();
    $statement->free_result();
    $statement->close();
}

Я хотел бы подготовить оператор вместо вставки необработанных данных в запрос.

2 ответа

Решение

% должен быть частью значения:

$query = "
SELECT * from (    
    SELECT link
    FROM items
    WHERE countries LIKE ?
    ORDER BY value DESC
    LIMIT 10   
) T ORDER BY RAND() 
LIMIT 1
";
if ($statement = $mysqli->prepare($query))
{
    $statement->bind_param("s","%".$Country."%");
    $statement->execute();
    $statement->store_result();
    $statement->bind_result($link);
    $statement->fetch();
    $statement->free_result();
    $statement->close();
}

Вы можете использовать его как

$country = "%{$country}%";

$query = "
SELECT * from (    
    SELECT link
    FROM items
    WHERE countries LIKE ?
    ORDER BY value DESC
    LIMIT 10   
) T ORDER BY RAND() 
LIMIT 1
";
if ($statement = $mysqli->prepare($query))
{
    $statement->bind_param("s", $country);
    $statement->execute();
    $statement->store_result();
    $statement->bind_result($link);
    $statement->fetch();
    $statement->free_result();
    $statement->close();
}
Другие вопросы по тегам