0

短いコード行で特定のエントリを検索するためのSQL検索文字列を構築するphpクラスの検索機能を構築したいと思います。

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

自己の結果を取得するためのより簡単な可能性があるかどうか疑問に思います...実際、ANDまたは "OR"の依存関係の可能性を取得するには、操作記号を使用してこの関数を作成する必要があります...

これを使うと、

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

「OR」ではなく「AND」を使用して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);
}

私の英語をお勧めします、それは私の母国語ではありません...

4

1 に答える 1

0

代わりにオブジェクトのインスタンスを返す場合は、プライベート文字列でクエリをチェーンして構築し、最後のステートメントでステートメントをコンパイル/実行できます。

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

戻り値

select * from table where a = 1

于 2012-02-25T04:24:22.880 に答える