2016-12-11 7 views
0

プロパティ名(1つ以上の単語でも可)のテーブルを持つMySqL DBがあります。オートコンプリートフィールドに使用するユーザーテキスト入力の結果を取得するクエリを実行したいとします。オートコンプリートのPHP SQLクエリー

私が現在使用してクエリは次のとおりです。

$query = "SELECT * FROM table WHERE LOWER(name) LIKE '%$value%' LIMIT 7"; 

しかし、それは十分ではありません。

Iは、入力$値を分割するが、何らかの理由で動作しない試してみました:

$values = explode(" ", $value); 

$str = ""; 
for($i = 0; $i < count($values); ++$i) 
{ 
    if($i == 0) 
     $str .= "LOWER(name) LIKE '%&$values[$i]%' "; 
    else 
     $str .= "AND LOWER(name) LIKE '%$values[$i]%' "; 
} 

$query = "SELECT * FROM table WHERE ". $str . " LIMIT 7"; 

あなたが何か提案はありますか?

TXです。

+0

を** WARNING **:これは、いくつかの深刻な[SQLインジェクションのバグ]を持っている(http://bobby-tables.com/) '$ _GET理由'クエリ内でデータが使用されます。可能な限り**準備文**を使用してください。これらは[mysqli](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と[PDO](http://php.net/manual/)で行うのはかなり簡単です。 en/pdo.prepared-statements.php)ここで、ユーザが提供するデータは '?'または ':name'のインジケータで指定され、後で' bind_param'や 'execute'を使ってデータを入力します。 **決して '$ _POST'または' $ _GET'データを直接クエリに入れないでください。 – tadman

+0

@freewindは私の答えを助けましたか? – divix

答えて

0

はあなたのクエリでOR代わりのANDを行います

$str .= "OR LOWER(name) LIKE '%$values[$i]%' "; 
関連する問題