Я хочу запросить mysql с запросом Where Match
используя mysqli prepared statements
. Проблема заключается в значениях Boolean Mode AGAINST values
,
обычно: (+value1 +value2 +value IN BOOLEAN MODE)
но проблема в том, что я не могу использовать его в подготовленных операциях, например (? ? ? IN BOOLEAN MODE)
потому что количество значений будет отличаться, а не фиксировано.
Я пробовал этот код:
$keywords = explode(" ", $SearchResults->squery); foreach($keywords as $key=>$value) { $keywords[$key] = '+'.$value; } $keywords = implode(",", $keywords); $dbconnect = new mysqli($host, $user, $pw, $db); $stmt = $dbconnect->prepare("SELECT `postid` FROM `espina5_jotecodb`.`posttd` WHERE MATCH (`title`) AGAINST (? IN BOOLEAN MODE)"); $stmt->bind_param('s', $keywords) if($stmt->execute()) { $stmt->bind_result($col1); while ($stmt->fetch()) { echo $col1."<br>"; } } $dbconnect->close();
$keywords
во время bind_param
будет содержать одну строку, содержащую +value1 +value2 +value3
Проблема с приведенным выше кодом заключается в том, что он не читает значения отдельно, а в целом, я думаю, что это из-за сингла ?
когда заявление было подготовлено, и сингл s
во время связывания. Я предположил, что могу сделать это так, думаю, я был неправ.
Таким образом, в любом случае приведенный выше код приведет к чтению первого значения и игнорированию последующих значений, поскольку значение рассматривается как одно значение. Поэтому я спрашиваю, как я могу получить подготовленные запросы оператора с динамическими значениями для логического режима? Должен ли я прибегать к запросу базы данных по отдельности для каждого значения?
Вы делаете это неправильно.
обычно: (+ значение1 + значение2 + значение В РЕЖИМЕ BOOLEAN)
это не. Обычно это должно быть
('+value1 +value2 +value' IN BOOLEAN MODE)
В кавычках и без запятых
то же самое происходит с использованием заполнителей: вы должны собрать свою строку поиска в PHP, а затем привязать ее целиком через один экземпляр.