Я попытался решить эту проблему с помощью подготовленных операторов PDO и mysqli, но он по-прежнему возвращает false. Так что что-то, вероятно, не так только с оператором sql, но я не знаю, что именно.
$query = $db->prepare('SELECT * FROM bricks WHERE "text" LIKE CONCAT("%", :phrase, "%") AND tags LIKE CONCAT("%", :tag, "%") ORDER BY hearts DESC LIMIT {$start},{$pagesOnSite}');
$query->bindValue(':phrase', $phrase, PDO::PARAM_STR);
$query->bindValue(':tag', $tag, PDO::PARAM_STR);
$query->execute();
Я тоже пробовал вот так:
$sql='SELECT * FROM bricks WHERE "text" LIKE CONCAT("%", ?, "%") AND tags LIKE CONCAT("%", ?, "%") ORDER BY hearts DESC LIMIT {$start},{$pagesOnSite}';
$stmt = $db->prepare($sql);
$stmt->bind_param("ss", $phrase, $tag);
$stmt->execute();
Почему в вашем запросе text заключен в двойные кавычки? Теперь это строка text, а не имя столбца.
Я думал, что мне нужно использовать concat, потому что я не могу использовать "%?%"
я изменил это сейчас, его текст
Неустранимая ошибка: Uncaught mysqli_sql_exception: в запросе / подготовленном операторе не используется индекс. SELECT * FROM bricks WHERE text LIKE CONCAT ("%",?, "%") И теги LIKE CONCAT ("%",?, "%") ORDER BY сердца DESC LIMIT 0,12
NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Я думал, что не имеет значения, какие открывающие и закрывающие кавычки я использую
@ Steve143 извините, я не посмотрел на ошибку. Я думаю, что это на самом деле предупреждение, и вы можете просто проигнорировать его или создать индексы.






Если вы хотите связать некоторый текстовый литерал, окруженный подстановочными знаками, вам следует создать это строковое значение целиком в своем PHP-коде. Затем свяжите его со своим утверждением.
$sql = "SELECT * FROM bricks ";
$sql .= "WHERE text LIKE :phrase AND tags LIKE :tag ";
$sql .= "ORDER BY hearts DESC LIMIT {$start}, {$pagesOnSite}";
$query = $db->prepare($sql);
$query->bindValue(':phrase', '%'.$phrase.'%', PDO::PARAM_STR);
$query->bindValue(':tag', '%'.$tag.'%', PDO::PARAM_STR);
$query->execute();
Большое спасибо! Теперь отлично работает. Можете ли вы показать мне, как это сделать с помощью подготовленных mysqli операторов (второй способ, который я пробовал, но потерпел неудачу)?
Будет ли это $ stmt-> bind_param ("ss", "%". $ Фраза. "%", "%". $ Tag. "%"); ?
Когда я пробую это стандартным способом, я получил: Неустранимая ошибка: Неперехваченная ошибка: Невозможно передать параметр 2 по ссылке.
@ Steve143 Если вам нужна помощь с другим API, задайте новый вопрос. Я ответил на ваш первоначальный вопрос.
@ Steve143 Это то, что вы должны учесть в своей логике PHP. С какой стати вы привязываете к своему заявлению буквальный %?
Вам нужно избежать обратной косой черты WHERE col LIKE '%100\%%' ... кстати, это ничего такого связано с вашим исходным вопросом, поэтому я снова пометил ваши комментарии.
Позвольте нам продолжить обсуждение в чате.
Нет, я не будет болтаю с тобой. Stack Overflow - это не какой-то безвкусный ресторан быстрого питания, куда вы постоянно возвращаетесь за бесплатными пополнениями. На ваш вопрос был дан ответ, и если у вас есть другие проблемы, вам следует задать новый вопрос.
Я думал, что могу избежать фильтрации вводимых пользователем данных по заранее подготовленным операторам.
почему вы используете concat для подстановочных знаков?