40

私は単純な検索アルゴリズムを構築しています。文字列をスペースで分割し、次のようにデータベースを検索したいと考えています。

$search = "Sony TV with FullHD support";  
$search = explode( ' ', $search );

SELECT name FROM Products WHERE name LIKE %$search[1]% AND name LIKE %$search[2]% LIMIT 6

これは可能ですか?

4

6 に答える 6

72

はい、SQLIN演算子を使用して複数の絶対値を検索できます。

SELECT name FROM products WHERE name IN ( 'Value1', 'Value2', ... );

使用したい場合は、代わりLIKEに使用する必要があります:OR

SELECT name FROM products WHERE name LIKE '%Value1' OR name LIKE '%Value2';

(試したように)を使用するにANDは、すべての条件が真であるOR必要があり、使用するには少なくとも1つが真である必要があります。

于 2013-04-26T15:32:17.340 に答える
0

これはここで部分的に回答されています: MySQL のように複数の値

私は反対することをお勧めします

$search = 爆発( ' ', $search );

これにより、検索バーを介して SQL が挿入されやすくなるため、それらを SQL クエリに直接入力します。"--; DROP TABLE name;

$search = str_replace('"', "''", 検索 );

しかし、それでも完全に安全というわけではありません。より安全にするために、SQL 準備済みステートメントを使用するように努める必要があります。正規表現を使用すると、関数を作成して必要なものを準備および作成するのがはるかに簡単になります。

function makeSQL_search_pattern($search) {
    search_pattern = false;
    //escape the special regex chars
    $search = str_replace('"', "''", $search);
    $search = str_replace('^', "\\^", $search);
    $search = str_replace('$', "\\$", $search);
    $search = str_replace('.', "\\.", $search);
    $search = str_replace('[', "\\[", $search);
    $search = str_replace(']', "\\]", $search);
    $search = str_replace('|', "\\|", $search);
    $search = str_replace('*', "\\*", $search);
    $search = str_replace('+', "\\+", $search);
    $search = str_replace('{', "\\{", $search);
    $search = str_replace('}', "\\}", $search);
    $search = explode(" ", $search);
    for ($i = 0; $i < count($search); $i++) {
        if ($i > 0 && $i < count($search) ) {
           $search_pattern .= "|";
        }
        $search_pattern .= $search[$i];
    }
    return search_pattern;
}

$search_pattern = makeSQL_search_pattern($search);
$sql_query = "SELECT name FROM Products WHERE name REGEXP :search LIMIT 6"
$stmt = pdo->prepare($sql_query);
$stmt->bindParam(":search", $search_pattern, PDO::PARAM_STR);
$stmt->execute();

私はこのコードをテストしていませんが、これは私があなたの場合に行うことです。これが役立つことを願っています。

于 2018-05-18T03:48:57.987 に答える