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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PDO LIKE с циклом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Реализация
Nizz
Отправлено: 24 Мая, 2018 - 09:50:46
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Доброго времени суток ув. форумчане. Вот уже второй день пытаюсь написать простенькую функцию запроса к БД используя 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.  


Укажите пожалуйста мне на ошибку, почему не выполняется поиск. Спасибо.

(Отредактировано автором: 24 Мая, 2018 - 10:11:34)

 
 Top
Мелкий Супермодератор
Отправлено: 24 Мая, 2018 - 10:44:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Потому что у вас объявлено много параметров запроса, но передаёте вы одно значение только. Собирайте сразу массив параметров для execute


-----
PostgreSQL DBA
 
 Top
Nizz
Отправлено: 24 Мая, 2018 - 10:53:42
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Мелкий Понял, а не подскажите хотя бы пример как это должно выглядеть ?
 
 Top
Мелкий Супермодератор
Отправлено: 24 Мая, 2018 - 10:57:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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


-----
PostgreSQL DBA
 
 Top
Nizz
Отправлено: 24 Мая, 2018 - 11:45:26
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Мелкий преклоняюсь перед вами как перед специалистом. Мне ужасно стыдно перед вами за свою безграмотность, и я не смогу найти слова выражающие мою благодарность. Отдельно спасибо за рекомендацию относительно E_ALL. -> Как следствие - куча ошибок, которые нужно исправить на сайте. Спасибо вам за все.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB