2011-07-03 28 views
2

私の目標は、列Aの文字列Bを検索し、それが見つかった場合は見つかった行を返します。見つからなかった場合は、違う行動を取るためにもそれを知ってください。正確な文字列をSQLで検索する方法

私の現在のPHPコード:

$string = "teststring"; 
$searchquery = "SELECT * 
        FROM AllStringsTable 
       WHERE `Column_A` LIKE '$string'" 

$searchresult = mysql_query($searchquery) or die(mysql_error()); 
$row = mysql_fetch_row($searchresult); 
echo "The returned row was: $row"; 

これは単なる破壊し、何もしないので、私は、私はここに道オフだと思います。また、ワイルドカード部分文字列などを必要としない正確な文字列検索については、LIKEは必要ありません。だから私は代わりに何を使うのか分からない...

+0

フルテキスト検索(FTS)を使用すると、こうした状況に適した(パフォーマンスを含む)アプローチです。しかし、[MySQLのネイティブ機能では、テーブルがMyISAMである必要があります](http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html)。しかし、Sphinxのようなサードパーティのツールも同様の機能を提供します。 –

答えて

3

あなたはほとんどそこにいる。あなたは正確試合をしたい場合は代わりに LIKE の=を使用し、

// First, prevent sql injection with mysql_real_escape_string 
$string = mysql_real_escape_string($string); 

$searchquery = "SELECT * FROM AllStringsTable WHERE `Column_A` LIKE '%{$string}%'"; 
// ----------------------------------------------------------------^^^-------^^^ 

$searchresult = mysql_query($searchquery) or die(mysql_error()); 

if (mysql_num_rows($searchresult) == 0) { 
    echo "no rows found"; 
} 
else { 

    // You need to loop over the result resource to get all the rows. 
    // Better to use mysql_fetch_array() 
    while ($row = mysql_fetch_array($searchresult)) { 
    $print_r $row; 
} 
+0

なぜ '%{$ string}%'だけでなく '%$ string%'、なぜdiffですか? – afarazit

+0

瞬時に対応してくれてありがとうございます。また、はい、大括弧で何がわかっていますか? –

+2

@afarazit、@Rich Haygren '{}'を参照している場合、変数名の終わりを知らせるのが難しい場合は、変数を囲むためにPHPで使用されます。 '$ array [0] [3]'や '$ obj-> property'のような複雑なものに最も有用で、厳密にはここでは必要ありません。しかし読みやすさを追加します。 –

2

:(

SELECT ... WHERE Column_A = '$string'; 

あなたはサブストリングの一致をしたい場合は、%ワイルドカードを必要としますあなたが望むものがそれよりも多いと思われる)は、LIKE%ワイルドカードを使用してください:

SELECT ... WHERE Column_A = '%$string%'; 

最初のクエリでは、Column_A全体がと正確に一致する必要があります。正確にはです。 2番目のクエリでは、正確な単語が列のどこかにあることだけが必要です。

関連する問題