0

我想为我的 php 类构建一个搜索函数,该类构建一个 sql 搜索字符串,用于使用一小行代码搜索特定条目:

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

我想知道是否有更容易获得自我结果的可能性......事实上,我必须用操作符号构建这个功能才能获得 AND 或“OR”依赖的可能性......

如果你用这个,

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

它使用“AND”而不是“OR”生成 sql 查询字符串

有什么建议么?

我正在寻找一种简单而干净的解决方案来使“LIKE”或“=”动态并使用简单的 1-liner 来获得我的结果...... :)

/*
*/
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);
}

对不起我的英语,这不是我的母语...

4

1 回答 1

0

如果您返回对象的实例,则可以链接并在私有字符串中构建查询,然后您的最后一条语句可以编译/运行该语句。

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

返回

select * from table where a = 1

于 2012-02-25T04:24:22.880 回答