php, функция поиска в MySQL - PullRequest
       25

php, функция поиска в MySQL

0 голосов
/ 25 февраля 2012

Я хочу построить функцию поиска для моего класса php, который создает строку поиска sql для поиска определенных записей с короткой строкой кода:

$obj -> search(array('key'=>'value'),true_or_false);

Интересно, есть ли какая-нибудь более простая возможность получить собственные результаты ... на самом деле мне нужно построить эту функцию с операционным знаком, чтобы получить возможность для зависимостей AND или "OR" ...

если вы используете это,

$obj->search(array('key'=>'value','+2ndkey'=>'2ndvalue'))

генерирует строку запроса sql с «И» вместо «ИЛИ»

есть предложения?

Я особенно ищу простое и чистое решение, чтобы сделать "LIKE" или "=" динамическим и использовать простой 1-строчный для получения моих результатов ...:)

/*
*/
function search($params,$strict = false)
{
    if(!is_array($params)||!count($params))
        return false;

    $sql = 'SELECT `sampleid` FROM `sampletable` WHERE ';
    $n = 0;
    foreach ( $params AS $key => $value )
    {
        $key = mysql_real_escape_string($key);
        $op = substr($key,0,1)=='+'?true:false;
        $key = $op ? substr($key,1,strlen($key)):$key;
        $value = mysql_real_escape_string($value);
        $str = sprintf($strict!==false?"`%s` = '%s'":"`%s` LIKE '%%%s%%'",$key,$value);

        if($n!=0)
        {
            $sql .= $op ? ' AND ' : ' OR ';
        }
        $sql .= $str;
        $n++;
    }

    $sql .= ' LIMIT 25'; //implode($strict!==false?' AND ':' OR ',$req) . ' LIMIT 25';
    return $this -> db -> get($sql);
}

прошу прощения за мой английский, это не мой родной язык ...

1 Ответ

0 голосов
/ 25 февраля 2012

Если вместо этого вы возвращаете экземпляр своего объекта, вы можете связать и построить запрос в частной строке, и тогда ваш последний оператор может быть скомпилирован / выполнен оператором.

$db->select('*')->from('table')->where('a = 1')->compile();

возвращает

select * from table where a = 1

...