2011-12-30 14 views
0

現在検索フォームで作業していますが、うまくいっていますが、いずれの結果も正常に表示されません。PHPフォーム検索MySQLデータベース

あなたはsearch.phpに行く場合は、単語「ドラゴン」今

を持ついくつかの結果は、それが名前=龍?がある見ることができるようにここではデータベース

http://screensnapr.com/e/IdNs9j.png

のスクリーンショットですこれらの結果が表示されます:

Results 

Sorry, your search: dragon returned zero results 

You searched for: dragon 

Results 
End of results 

ここでは検索クエリです

$searchTerm = trim($_GET['search']); 
$query = "select * from item where name like '$searchTerm' order by name"; 
$numresults=mysql_query($query); 
$numrows=mysql_num_rows($numresults); 
if ($numrows == 0) { 
echo "<h4>Results</h4>"; 
echo "<p>Sorry, your search: " . $searchTerm . " returned zero results</p>"; 
} 

なぜ結果が表示されないのですか?どんな助けもありがとう。

答えて

1

like操作でワイルドカード演算子を指定していません。ワイルドカードを使用しない場合、somefield LIKE 'something'somefield='something'とまったく同じです。

あなたのクエリが

SELECT ... LIKE '%$searchTerm%'; 
       ^--   ^-- wildcards 

ことが、あなたはSQLインジェクション攻撃に対して広く開いていることに注意してください。最低でも、

$searchTerm = mysql_real_escape_string($_GET['search']); 

以上である必要があります。また、PDOプリペアドステートメントを使用してください。

+0

ありがとう、私は元々はワイルドカードを持っていましたが、エラーを引き起こすようになるので、削除するように言われました また、mysqlrealescapestringを追加しました。感謝します。 P このトピックについては、ワイルドカードで修正しました。ありがとう – Travs

+0

誤って使用しない限り、エラーは発生しません。 '... LIKE%keyword%'のようなもの、または '... LIKE% 'キーワード'%'のような外部引用符。 –

+0

元のバージョンは/ "%$ searchTerm%/"でしたが、削除したコードの古い部分に問題があったため、クエリの「好き」部分がワイルドカードの原因であると考えました:P – Travs