2012-04-26 4 views
0

このクエリを使用して着信音を鳴らします。

$result2 = mysql_query("select * from ringtones where (artist LIKE '%$artist%' or title LIKE '%$title%') and id!='$ringtoneid' limit 50"); 

質問です: $アーティストまたは$タイトルが空の場合、すべての行を表示から防ぐためにどのように? クエリ変数を使用しないでください(PHP変数に適切なクエリ文字列をチェックして入れます)。

他の "考え"については?

ありがとうございました。

+0

そのクエリは、最初の50行のみを表示します。 –

+3

**実際には準備済みの文を使用する必要があります。理由がわからない場合は、[Bobby Tables](http://bobby-tables.com)を参照してください。 – eggyal

+1

二重の '%'を使わないでください。これは将来のパフォーマンスに実際に影響します – Baba

答えて

3

ただ、追加条件を追加:

ボビーテーブルが言及したように
if (isset($artist)) 
    $condition .= "artist LIKE '%$artist%'" 
.... 
$result2 = mysql_query("select * from ringtones where $condition"); 

しかし、再び、あなたが使用する必要があります。

AND '$artist$title' != '' 
+0

これはほとんどうまくいくが、そのような文脈では機能しない。 –

+0

ここで((アーティストLIKE '%$アーティスト%'と 'アーティスト'!= '')または(タイトルLIKE '%$タイトル%'と '$タイトル'!= ''))とid!= '$ ringtoneid ' –

0

いけないの$ VARが設定されていない限り句をWHEREに条件を追加文を準備する

+0

mysql_real_escape_string()でSQLインジェクション攻撃を回避できません。 ? –

+0

それを取り戻しました:)クエリーを複数回実行する必要があり、クライアントとサーバー間のデータ転送速度を向上させる必要がある場合は、通常prepareステートメントを使用することをお勧めします。そしてはい、あなたはそれらをエスケープする必要があります –

+0

より少ない担当者とのユーザーは私に言っている.. =)) –

関連する問題