1
$sql = sprintf( "SELECT topic_title 
                   FROM `phpbb_topics` 
                  WHERE `topic_title` LIKE '%%%s%%' LIMIT 20"
               , mysql_real_escape_string('match this title')
              );

phpMyAdminでこのクエリを実行すると、結果は次のようになります:(正しい)

match this title
match this title 002

しかし、PHPで同じMYSQLクエリを実行すると、次のようになります:(正しくない)

match this title 002

また、phpとphpMyAdminの両方で同じ結果でMATCHAGAINSTを試しました。

$sql = "SELECT topic_title 
          FROM phpbb_topics 
         WHERE MATCH (topic_title) 
               AGAINST('match this title' IN BOOLEAN MODE)";

検索に使用するコードのブロック全体:

mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("phpbb") or die(mysql_error());         
$query = "match this title";
$query = "SELECT topic_title 
    FROM phpbb_topics 
    WHERE MATCH (topic_title) 
          AGAINST('$query' IN BOOLEAN MODE)"; 
// Doesn't work (these 2 both give the same result "match this title 002" and no the "match this title")
// $query = "SELECT * FROM `phpbb_topics` 
//    WHERE `topic_title` 
//    LIKE '%$query%' 
//    LIMIT 0, 30 "; // Doesn't work
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result) or die(mysql_error());

while($row = mysql_fetch_array($result)){
    $topic_title = $row['topic_title'];
    echo "$topic_title";
}

私が間違っていることについて何か考えはありますか?

私はあちこちを検索していて、ほとんど助けがないことを発見しました:(

4

1 に答える 1

1

問題は、クエリを実行した後、最初の行をフェッチし、それを何もせずに、2番目の行をフェッチしてループに入り、結果の印刷を開始することです。

最初のを削除する$row = mysql_fetch_array($result)と(直後$result = mysql_query($query) or die(mysql_error());)、問題ないはずです。

別のコメント; 変数をエコーする場合、その周りにqoutesを配置する必要はありません。そして、あなたが今それをしている方法では、あなたは結果の間に改行を取得しないので、あなたはその行をに変更したいかもしれませんecho $topic_title . "<br>";

于 2010-04-06T13:34:34.713 に答える