PHP MySQL подготовил заявление с использованием подстановочных знаков - PullRequest
0 голосов
/ 18 мая 2011

Я пытаюсь построить этот подготовленный оператор:

$sql = "SELECT * FROM entries WHERE";
$sql .= " title LIKE ? OR title LIKE ? OR title LIKE ? OR title LIKE ?";
$sql .= " OR content LIKE ? OR content LIKE ? OR content LIKE ? OR content LIKE ?";

$q = $this->db->prepare($sql);

$one = $this->term;
$two = "%" . $this->term;
$three = $this->term . "%";
$four = "%" . $this->term . "%";

$q->bind_param("ssssssss", $one, $two, $three, $four, $one, $two, $three, $four);
$q->execute();

$ this-> db - это мой объект подключения mysqli

$ this-> term - строка, предоставленная пользователем.

Я не получаю ни одного типа ошибки из базы данных.Я знаю, что SQL-оператор работает, я запустил его с помощью $ this-> db-> query (), и все получилось хорошо.Когда я запускаю его с подготовленным утверждением, оно возвращается без результатов.Есть предложения?

Ответы [ 2 ]

1 голос
/ 09 сентября 2013

Чтобы использовать подстановочный знак в подготовленном выражении, вам нужно использовать CONCAT в своем выражении sql. База данных позаботится о соединении знаков процента в вашем поисковом запросе.

Если вы хотите использовать подстановочный знак в начале или конце поискового запроса, ваш sql должен выглядеть следующим образом:

$sql = "SELECT * FROM entries WHERE title LIKE CONCAT('%', ?, '%') OR content LIKE CONCAT('%', ?, '%')";
0 голосов
/ 20 мая 2011

Я не мог заставить его работать с подготовленным заявлением.Я перешел к mysqli-> query () и избежал пользовательской строки.Карлос, спасибо за помощь в исправлении моего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...