Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск LIKE'ом в PEAR DB
 
 автор: aetern   (21.05.2009 в 19:57)   письмо автору
 
 

Не могу понять, почему в PEAR DB вот так работает:

$result = $db->query( "SELECT * FROM table where col LIKE ?", array('%rin%', '%rin%'));  


а вот так - нет!

$val = "'%rin%', '%rin%'";
$result = $db->query( "SELECT * FROM table where col LIKE ?", array($val));  

  Ответить  
 
 автор: aetern   (23.05.2009 в 16:02)   письмо автору
 
   для: aetern   (21.05.2009 в 19:57)
 

На верху небольшая ошибка, нужно

$result = $db->query( "SELECT * FROM table where col LIKE ? or col LIKE ?", array('%rin%', '%rin%'));

но всеравно не работает.
Причем, вот так тоже работает:

$val = "%rin%"; 
$result = $db->query( "SELECT * FROM table where col LIKE ?", array($val)); 


неужели дело в запятой?
или я не правильно понял логику?

  Ответить  
 
 автор: aetern   (23.05.2009 в 16:31)   письмо автору
 
   для: aetern   (23.05.2009 в 16:02)
 

Почитал о массивах и сам разобрался.
Как бы эту тему удалить, а то, стыдно?

  Ответить  
 
 автор: Trianon   (23.05.2009 в 23:21)   письмо автору
 
   для: aetern   (23.05.2009 в 16:31)
 

а что стыдного в том, что разобрались в том, чего не знали?
Написали бы лучше решение. Может кому пригодится.

  Ответить  
 
 автор: aetern   (13.06.2009 в 13:27)   письмо автору
 
   для: Trianon   (23.05.2009 в 23:21)
 

Решил вопрос ПРИМЕРНО так:

$val = "ring love big";
$search = explode(" ", $val);
    for($i=0;$i<count($search);$i++)
        {
        if(isset($srch))
            {
            $where_srch .= ' or col LIKE ?';
            }
        $srch = 'col LIKE ?';
        $where_data[$i] = "%$search[$i]%";
        }
$where_srch = $srch.$where_srch;


если посмотреть результат

echo '$where_srch = '.$where_srch.'<br><br>$where_data =';

print "<pre>";    
print_r ($where_data);
print "</pre>";

то он будет выглядеть так:

$where_srch = col LIKE ? or col LIKE ? or col LIKE ?

$where_data =
Array
(
[0] => %ring%
[1] => %love%
[2] => %big%
)

  Ответить  
 
 автор: Valick   (13.06.2009 в 13:31)   письмо автору
 
   для: aetern   (13.06.2009 в 13:27)
 

Почему for а не foreach?
и вот это непонятно
        if(isset($srch)) 
            { 
            $where_srch .= ' or col LIKE ?'; 
            } 
        $srch = 'col LIKE ?'; 
        $where_data[$i] = "%$search[$i]%";



$val = "ring love big"; 
$search = explode(" ", $val); 
$where_srch = 'col LIKE ?'; 
    foreach($search as $key=>$value) { 
            $where_srch .= ' or col LIKE ?'; 
            $where_data[$key] = "%$value%"; 
    } 

  Ответить  
 
 автор: aetern   (13.06.2009 в 14:51)   письмо автору
 
   для: Valick   (13.06.2009 в 13:31)
 

Согласен насчет foreach в данном примере, но я привел только часть своего кода и не стал его переделывать.
Задумка здесь в том, что я первоначально проверяю массив $search и игнорирую слова меньше 3 символов, пробелы, недопустимые знаки и т.д.
А переменную $i использую для соответствия количества LIKEов и значений.

Насчет

if(isset($srch))  
            {  
            $where_srch .= ' or col LIKE ?';  
            }  
        $srch = 'col LIKE ?';  
        $where_data[$i] = "%$search[$i]%";

сдесь все просто, в начале не должно быть слова or

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования