8

ajax を使用してデータベース内のデータを動的に検索するコードがありますが、一度に 1 つのキーワードしか検索できません。複数のキーワードで検索できるように修正したいと思います。ここで、スペースで区切られた 2 つのキーワードをデータベースに入力すると、データがスペースで区切られていないため、結果はありません。データベース内のデータが次の場合:

「playstation3」または「クールなステーション3をプレイ」

そして私は検索します:

プレイステーション

結果はありません。スペース、別の単語、DOT、アンダースコア、(-)、(+)、または (%) で区切られた 2 つ以上のキーワードまたは単語を検索できるように、コードを変更できるかどうかを知りたいです。または(他のもの笑)。

pdo または mysqli を使用する必要があることはわかっていますが、これはテスト目的でのみ使用しています。

$queried = $_POST['query'];



$search = mysql_query("SELECT * FROM links WHERE name LIKE '%$queried%'");
while($searche = mysql_fetch_array($search)){
    echo "".$searche['link']."</br>".$searche['name']."</br>".$searche['size']."</br>".$searche['category']."<hr></br></br>";

    }
4

4 に答える 4

24

すべてのキーワードを動的に検索するには、explode関数を使用してすべてのキーワードを分離できます。

$queried = mysql_real_escape_string($_POST['query']); // always escape

$keys = explode(" ",$queried);

$sql = "SELECT * FROM links WHERE name LIKE '%$queried%' ";

foreach($keys as $k){
    $sql .= " OR name LIKE '%$k%' ";
}

$result = mysql_query($sql);

注1:クエリで使用する前に、必ずユーザー入力をエスケープしてください。

注2: mysql_*関数は非推奨です。代わりにMysqliまたはPDOを使用してください

2018年の更新-注3:$queried変数の長さを確認し、制限を設定することを忘れないでください。そうしないと、ユーザーはさまざまな大きな文字列を入力してデータベースをクラッシュさせる可能性があります。

于 2013-03-21T02:55:05.363 に答える
2

mysql_*もうテストのためにも関数を使用しないでください。mysqliここでテストして移動するのが簡単だと思った場合に備えて、これらは簡単ではありません。

ただし、で入力を分割して,これを試すことができます

<?php

$queried="abc,test, testing";
$values=explode(',',$queried);


$sql="SELECT * FROM links WHERE";
$i=0;

foreach($values as $v)
{
    $v=trim($v);
    if($i==0)
    {
        $sql.=" name LIKE '%$v%'";
    }
    else
    {
        $sql.=" OR name LIKE '%$v%'";
    }

    $i++;
}

$search = mysql_query($sql);
while($searche = mysql_fetch_array($search))
{
    echo "".$searche['link']."</br>".$searche['name']."</br>".$searche['size']."</br>".$searche['category']."<hr></br></br>";

}    
?>
于 2013-03-21T02:53:53.663 に答える
0

OR 句を追加するだけです。

例えば

SELECT * FROM links WHERE name LIKE '%$keyword1%' OR name LIKE '%$keyword2%'

ただし、パラメーター化されたクエリまたはその他の安全なライブラリを使用して、SQL インジェクション攻撃を回避することを強くお勧めします

于 2013-03-21T02:49:31.873 に答える