Почему этот SQL-запрос возвращает false, когда я пытаюсь связать значения (даже оператор подготовки)?

Я попытался решить эту проблему с помощью подготовленных операторов 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();

почему вы используете concat для подстановочных знаков?

madalinivascu 25.09.2018 12:29

Почему в вашем запросе text заключен в двойные кавычки? Теперь это строка text, а не имя столбца.

KIKO Software 25.09.2018 12:30

Я думал, что мне нужно использовать concat, потому что я не могу использовать "%?%"

Steve143 25.09.2018 12:34

я изменил это сейчас, его текст

Steve143 25.09.2018 12:34

Неустранимая ошибка: Uncaught mysqli_sql_exception: в запросе / подготовленном операторе не используется индекс. SELECT * FROM bricks WHERE text LIKE CONCAT ("%",?, "%") И теги LIKE CONCAT ("%",?, "%") ORDER BY сердца DESC LIMIT 0,12

Steve143 25.09.2018 12:35
NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Я думал, что не имеет значения, какие открывающие и закрывающие кавычки я использую
Steve143 25.09.2018 13:04

@ Steve143 извините, я не посмотрел на ошибку. Я думаю, что это на самом деле предупреждение, и вы можете просто проигнорировать его или создать индексы.

Salman A 25.09.2018 13:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
48
1

Ответы 1

Если вы хотите связать некоторый текстовый литерал, окруженный подстановочными знаками, вам следует создать это строковое значение целиком в своем 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 операторов (второй способ, который я пробовал, но потерпел неудачу)?

Steve143 25.09.2018 12:44

Будет ли это $ stmt-> bind_param ("ss", "%". $ Фраза. "%", "%". $ Tag. "%"); ?

Steve143 25.09.2018 12:46

Когда я пробую это стандартным способом, я получил: Неустранимая ошибка: Неперехваченная ошибка: Невозможно передать параметр 2 по ссылке.

Steve143 25.09.2018 12:53

@ Steve143 Если вам нужна помощь с другим API, задайте новый вопрос. Я ответил на ваш первоначальный вопрос.

Tim Biegeleisen 25.09.2018 13:02

@ Steve143 Это то, что вы должны учесть в своей логике PHP. С какой стати вы привязываете к своему заявлению буквальный %?

Tim Biegeleisen 25.09.2018 15:03

Вам нужно избежать обратной косой черты WHERE col LIKE '%100\%%' ... кстати, это ничего такого связано с вашим исходным вопросом, поэтому я снова пометил ваши комментарии.

Tim Biegeleisen 25.09.2018 15:07

Позвольте нам продолжить обсуждение в чате.

Steve143 25.09.2018 15:09

Нет, я не будет болтаю с тобой. Stack Overflow - это не какой-то безвкусный ресторан быстрого питания, куда вы постоянно возвращаетесь за бесплатными пополнениями. На ваш вопрос был дан ответ, и если у вас есть другие проблемы, вам следует задать новый вопрос.

Tim Biegeleisen 25.09.2018 15:10

Я думал, что могу избежать фильтрации вводимых пользователем данных по заранее подготовленным операторам.

Steve143 25.09.2018 15:14

Другие вопросы по теме