Этот вопрос похож на этот ранее заданный вопрос за исключением того, что я использую mysqli вместо PDO.
Я выполняю запрос так:
$word=preg_split('/[\s]+/',$terms);
$totalwords=count($word);
$ условия получены далее от GET
$sql="SELECT title,content FROM articles WHERE (title LIKE CONCAT('%',?,'%') OR (content LIKE CONCAT('%',?,'%'))";
for(i=1;$i<$totalwords;$i++){
$sql.=" OR (title LIKE CONCAT('%',?,'%') OR (content LIKE CONCAT('%',?,'%'))";
}
$stmt=$conn->prepare($sql);
foreach($word as $key => $keyword){
$term=$keyword;
$stmt->bind_param('ss',$term,$term);
}
$stmt->execute;
$stmt->store_result;
Если я ввожу одно слово в форму поиска, я получаю правильные результаты, однако, если я ввожу более одного слова, я вообще не получаю никаких результатов.
Итак, я включил print_r($sql);
, чтобы увидеть, что отправлялось в базу данных, и это то, что я получаю за один термин (который отлично работает):
SELECT title,content FROM articles WHERE (title LIKE CONCAT('%',?,'%') OR content LIKE CONCAT('%',?,'%'));
и это то, что я получаю за несколько слов (которые не дают результатов, хотя и должны):
SELECT title,content FROM articles WHERE (title LIKE CONCAT('%',?,'%') OR content LIKE CONCAT('%',?,'%')) OR (title LIKE CONCAT('%',?,'%') OR content LIKE CONCAT('%',?,'%'));
кажется, что все работает нормально, поэтому я включил свои журналы mysql и обнаружил, что запросы с одним словом отображаются, но запросы с несколькими словами отсутствуют.
Итак, я добавил print_r($stmt);
и получил Commands out of sync; you can't run this command now
для запросов из нескольких слов.
Что я делаю не так?