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 :: Версия для печати :: Возможно составить такой запрос?
Форумы портала PHP.SU » » Работа с СУБД » Возможно составить такой запрос?

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

1. alexey11 - 07 Сентября, 2011 - 15:07:55 - перейти к сообщению
Возможно ли сделать так, чтобы определение WHERE бралось с переменной?

К примеру
PHP:
скопировать код в буфер обмена
  1. $r1='name="ddd"';
  2. mysql_query('SELECT * FROM base1 WHERE $r1', $db);
  3.  

А вообще нужно так:
В форме три текстовых поля и нужно чтобы выборка делалась именно по тем полям которые имеют значение. Если в какое то текстовое поле формы не введено ничего, то и в выборке оно не учитывается.

Как то можно такое сделать?
2. OrmaJever - 07 Сентября, 2011 - 15:10:19 - перейти к сообщению
да это возможно только нужно запрос брать в двойные кавычки "
PHP:
скопировать код в буфер обмена
  1. $r1='name="ddd"';
  2. mysql_query("SELECT * FROM base1 WHERE $r1", $db);
3. alexey11 - 07 Сентября, 2011 - 15:15:03 - перейти к сообщению
Получилось. Спасибо!
А как можно сделать именно что бы проверялось если в форме поле пустое, то не учитывается в запросе?
4. LIME - 07 Сентября, 2011 - 15:24:11 - перейти к сообщению
например както так
PHP:
скопировать код в буфер обмена
  1. empty($_GET['name'])?$r1='':$r1="name='{$_GET['name']}'";
5. alexey11 - 07 Сентября, 2011 - 15:46:23 - перейти к сообщению
Да, но получается что в запросе - если переменная пуста, то where остается без параметра и получается ошибка...
6. LIME - 07 Сентября, 2011 - 15:51:37 - перейти к сообщению
alexey11 так у вас 1 только параметр передается? ну тогда вообще в чем проблема?
проверяете если пришло делаете запрос если нет делаете что там вам надо еще
либо сами додумайте либо просто дайте код для доводки
как тут угадаеш что там у вас
7. OrmaJever - 07 Сентября, 2011 - 16:02:54 - перейти к сообщению
ну так добавьте туда where
PHP:
скопировать код в буфер обмена
  1. $r1 = empty($_GET['name']) ? '' : "WHERE name='{$_GET['name']}'";
  2. mysql_query("SELECT * FROM base1 $r1", $db);
8. alexey11 - 07 Сентября, 2011 - 19:07:04 - перейти к сообщению
... у меня 4 передаваемых параметра. Но из них , к примеру, 2 может не быть или быть всего 1, а может даже не одного (в таком случае просто выводится вся база)! И первый тоже не всегда может быть, потому просто добавить where не получиться, так же где то нужно передавать и AND ...
9. DeepVarvar - 07 Сентября, 2011 - 19:29:03 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $arr = array("field1 = 'hfjfk'","field2 = 'nhgfjfk'","field3 = 767685");
  2. $where = (count($arr) > 0) ? " WHERE ".implode(" AND",$arr) : "";
10. OrmaJever - 07 Сентября, 2011 - 21:06:26 - перейти к сообщению
alexey11 ну вот эти 4 параметра должны както передаватся в скрипт, предположим что это масив из $_GET['name'].
Пошагово зделаем наш запрос
PHP:
скопировать код в буфер обмена
  1. $where = ''; // создаём пустую строку с условием
  2. if(sizeof($_GET['name']) > 0) { // если есть хоть один параметр добавляем их к переменой
  3. $where .= ' WHERE '; //добавляем к этой строке where
  4. $i = 0; // просто переменя для определения первой итерации цыкла
  5.   foreach($_GET['name'] as $k =>  $v) { // перебираем масив, цыклов будет столько сколько параметров
  6.     if($i++ != 0) $where .= ' AND '; // если это не первая итерация цыкла то делаем $i+1 и добавляем в строку AND  
  7.     $where .= " `$k` = '$v'"; // добавляем к строке WHERE параметры
  8.   }
  9. }
  10. echo $where; // теперь $where можно добавлять в запрос, если нет параметров то он будет пустой.

это не самая идеальная схема но для понимания сойдёт Подмигивание
11. alexey11 - 07 Сентября, 2011 - 21:53:06 - перейти к сообщению
Спасибо за помощь.

Ну а если этот пример, то каким образом можно передать в этот массив данные?
DeepVarvar пишет:
$arr = array("field1 = 'hfjfk'","field2 = 'nhgfjfk'","field3 = 767685");
$where = (count($arr) > 0) ? " WHERE ".implode(" AND",$arr) : "";

У меня не получается... Недовольство, огорчение
Даже кавычки правильные сохранить не получается. Если просто вписываю в него, то работает, а сам факт передачи не получается. Если можно, помогите пожалуйста и с этой частью.
12. alexey11 - 08 Сентября, 2011 - 22:28:14 - перейти к сообщению
Спасибо за помощь.

Все получилось.

 

Powered by ExBB FM 1.0 RC1