Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: PDO LIKE с циклом
Форумы портала PHP.SU » » Вопросы новичков » PDO LIKE с циклом

Страниц (1): [1]
 

1. Nizz - 24 Мая, 2018 - 09:50:46 - перейти к сообщению
Доброго времени суток ув. форумчане. Вот уже второй день пытаюсь написать простенькую функцию запроса к БД используя PDO и LIKE. Вся сложность в том, что сам по себе запрос работает, но как только пытаюсь обернуть его в цикл - перестает. Суть работы:

Есть простой запрос:
PHP:
скопировать код в буфер обмена
  1.  
  2. $db = getPDOconnect (); // Подключение к БД
  3. $query = $db->prepare('SELECT * FROM products WHERE (name LIKE ? OR articl LIKE ?) OR (name LIKE ? OR articl LIKE ?)');
  4. $query->execute(array('%Хлеб%', '%Хлеб%', '%Бумага%', '%Бумага%',));
  5. while ($results = $query->fetch())
  6.   {    
  7.     echo '<hr> '.$results['id'].', '.$results['name'].' ';
  8.   }
  9.  
  10.  


Вся идея в том, что бы подставить цикл от кол-во значений в массиве в запрос и execute.

PHP:
скопировать код в буфер обмена
  1.  
  2. function ResoulteConnect ($keyword) {
  3.  
  4.     $arraywords = explode("-", $keyword); // $keyword это строка, с разделителем "-" между слов.
  5.  
  6.      foreach ($arraywords as $key => $values) {
  7.       if (isset($arraywords[$key - 1])) $query_search .= " OR ";
  8.       $query_search .= "(name LIKE ? OR articl LIKE ?)";
  9.    }
  10.  
  11.      foreach ($arraywords as $key => $values) {
  12.       if (isset($arraywords[$key - 1])) $query_word .= " , ";
  13.       $query_word .= "%$values% %$values%";
  14.    }
  15.  
  16.   $db = getPDOconnect ();
  17.   $query = $db->prepare('SELECT * FROM products WHERE '.$query_search.'');
  18.   $query->execute(array($query_word));
  19.   while ($results = $query->fetch())
  20.   {
  21.    
  22.    
  23.     echo '<hr> '.$results['id'].', '.$results['name'].' ';
  24.   }
  25.  }
  26.  


Укажите пожалуйста мне на ошибку, почему не выполняется поиск. Спасибо.
2. Мелкий - 24 Мая, 2018 - 10:44:04 - перейти к сообщению
Потому что у вас объявлено много параметров запроса, но передаёте вы одно значение только. Собирайте сразу массив параметров для execute
3. Nizz - 24 Мая, 2018 - 10:53:42 - перейти к сообщению
Мелкий Понял, а не подскажите хотя бы пример как это должно выглядеть ?
4. Мелкий - 24 Мая, 2018 - 10:57:32 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.    $params = [];
  2.    foreach ($arraywords as $key => $values) {
  3.       if (isset($arraywords[$key - 1])) $query_search .= " OR ";
  4.       $query_search .= "(name LIKE ? OR articl LIKE ?)";
  5.       $params[] = "%$values%";
  6.       $params[] = "%$values%";
  7.    }
  8. ...
  9.   $query->execute($params);

(Добавление)
Кстати, включите error_reporting в адекватный E_ALL (или -1 для музейных версий PHP), вы не видите как минимум пару E_NOTICE
5. Nizz - 24 Мая, 2018 - 11:45:26 - перейти к сообщению
Мелкий преклоняюсь перед вами как перед специалистом. Мне ужасно стыдно перед вами за свою безграмотность, и я не смогу найти слова выражающие мою благодарность. Отдельно спасибо за рекомендацию относительно E_ALL. -> Как следствие - куча ошибок, которые нужно исправить на сайте. Спасибо вам за все.

 

Powered by ExBB FM 1.0 RC1