Я использую PDO в php. Но когда мой запрос имеет какое-либо ключевое слово, например «», означает дефис, он ломается и через ошибку. Я готов через Интернет и найти решение для связывания параметров с запросом, и он отлично работает. Но проблема в том, что я строю запрос в цикле, и я не могу привязывать параметры в цикле. Вот код, в котором я разделяю массив с пробелом и запускаю запрос по каждому ключевому слову. Первые 3 слова будут иметь только как запрос и более 3 слов. Я использую цикл, чтобы объединить все элементы массива и то же самое с более чем 6 словами. Я использую запрос MATCH. Есть ли способ избежать этого дефиса или как мы можем привязать параметры с помощью цикла в моем случае?Параметры привязки с PDO в PHP
$keyword = ($_POST['keyword']);
$keyword_array = split(' ',$keyword);
/* Query For first Three Words */
if(count($keyword_array)<=3){
$sql = "SELECT * FROM faq WHERE question LIKE '%$keyword%' limit 14";
}
/* Query through all array when words are greater then 3 */
if(count($keyword_array)< 6){
$sql = "SELECT * FROM faq WHERE question ";
for($i = 0 ; $i<count($keyword_array); $i++){
if($i==0){
$sql.=" LIKE '%$keyword_array[$i]%'";
}else{
$sql.=" or question LIKE '%$keyword_array[$i]%' ";
}
}
$sql .= " ORDER BY question ASC LIMIT 0, 8";
}
/* Appl FULL TEXT in natual language mode once we have enough phrase */
else if(count($keyword_array)>=6){
$sql = "SELECT * FROM faq WHERE ";
for($i = 0 ; $i<count($keyword_array); $i++){
if($i==0){
$sql.=" MATCH (answer) AGAINST ('$keyword_array[$i]' in natural language mode) ";
}else{
$sql.=" or MATCH(answer) AGAINST('$keyword_array[$i]' in natural language mode) ";
}
}
$sql .= " limit 0,5";
}
$execute_faq_query = $conn->query($sql);
$execute_faq_query->setFetchMode(PDO::FETCH_ASSOC);
while ($list = $execute_faq_query->fetch()){
}
Цикл должен построить инструкцию SQL, а затем выполнить один SQL-запрос. –
Да, я попробовал это, но у меня проблема, потому что я новичок в PDO, вы можете помочь с любым циклом, тогда я буду использовать все остальные. – Bilal
PDO поддерживает именованные заполнители, такие как ': keyword', которые вы можете ссылаться во время' execute (array (': keyword' => $ keyword)) '. Добавление вещей в строку легко, и если вы добавите вещи в свой массив, они будут синхронизироваться. – tadman