0

そこで、テーブルを検索するためのMySQLコマンドを作成しようとしています。私がしたいのは:

私のテーブルには4つの列があります:id、、、。categoriesbrandsnames

検索ページのphp/htmlで、ユーザーはドロップダウンからカテゴリを選択します。これはカテゴリなのでcategory、検索ページに投稿されます。次に、テキストボックスにキーワードを入力します。keywordこれは検索ページに投稿されます。

categories投稿されたカテゴリを選択し、それらの選択された行で投稿されたキーワードを検索するMySQLコマンドを作成したいと思いbrandsますnames

これが私が試したことです:

"SELECT brands, names 
   FROM tableName 
  WHERE categories LIKE".$_GET['category']." 
    AND (brands LIKE ".$_GET['keyword']." 
     OR names LIKE ".$_GET['keyword'].");";
4

2 に答える 2

1

SQL では文字列を引用符で囲む必要があります。これを試して:

"SELECT brands, names 
   FROM tableName 
  WHERE categories LIKE '".$_GET['category']."' 
    AND (brands LIKE '".$_GET['keyword']."' 
         OR names LIKE '".$_GET['keyword']."');";

同じ始まりを持つ複数の単語など、バリエーションがあることを予期しない限り、LIKE を使用してもあまり効果がありません。これが予想される場合は、ワイルドカードを使用して、差異が予想される場所を指定する必要があります。

brands LIKE '".$_GET['keyword']."%' 
// User enters 'Mc', SQL end up as:
brands LIKE 'Mc%'
// Columns matched: 'McDonalds' 'McHenry'

その他の例はこちら.

これを許可したくない場合は、LIKE の代わりに = を使用してください。

また、正規表現などを使用してこれらの変数を最初にサニタイズする必要があります。これにより、現在誰かがSQL インジェクションでサーバーを攻撃できるようになります。

于 2012-07-26T21:47:32.127 に答える
0

コマンドを実行して、SQL ドキュメント エディタで操作してみてください。

(brands LIKE ".$_GET['keyword']." OR names LIKE ".$_GET['keyword'].");"

SQLite では、LIKE の代わりに等号を使用することを知っています。

 (brands='".$_GET['keyword']."' OR names='".$_GET['keyword']."');"
于 2012-07-26T21:50:21.727 に答える