1

スクリプトの機能: ユーザーがアーティスト名や曲名を検索できるようにする

他のユーザーへのメリット: スクリプトは、他の stackoverflow ユーザーが作業してサイトを検索できるように簡単に変更できます。クエリをデータベース構造に変更するだけです。

$query_Recordset1 = sprintf("SELECT * FROM lyrics WHERE title LIKE '%%%s%%' ORDER BY title ASC", $colname_Recordset1);

スクリプトに関する問題: 曲のタイトルには機能しますが、検索を変更するドロップダウンを使用せずに、アーティスト名と曲のタイトルを同時に検索する方法がわかりません。結果がない場合にもエラーを返します

アーティストの例 (Rihanna - id : 16689) (title : Unfaithful - id : 228106) http://www.thelyricsfinder.com/song.php?sid=228106&aid=16689

Search.php の実際の動作例

  • 結果が得られなかった場合のエラー出力を受け取りました (以下)

..

ERROR :
SQL 構文にエラーがあります。1 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

$maxRows_Recordset1 = 100;
$pageNum_Recordset1 = 0;
if (isset($_GET['pageNum_Recordset1'])) {
  $pageNum_Recordset1 = $_GET['pageNum_Recordset1'];
}
$startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;

$colname_Recordset1 = "-1";
if (isset($_POST['term'])) {
  $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_POST['term'] : addslashes($_POST['term']);
}
mysql_select_db($database_main, $main);
$query_Recordset1 = sprintf("SELECT * FROM lyrics WHERE title LIKE '%%%s%%' ORDER BY title ASC", $colname_Recordset1);
$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);
$Recordset1 = mysql_query($query_limit_Recordset1, $main) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);

if (isset($_GET['totalRows_Recordset1'])) {
  $totalRows_Recordset1 = $_GET['totalRows_Recordset1'];
} else {
  $all_Recordset1 = mysql_query($query_Recordset1);
  $totalRows_Recordset1 = mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;

OBJECTIVE : $_POST['term'] に渡される単一の検索からスクリプトが 2 つのテーブル/行を検索するようにしますが、KICKER は結果を 2 つの個別の変数に返して個別に表示します。

  1. ARTIST/アーティスト
  2. 歌詞・タイトル

これを行う方法を見つけるのを手伝ってくれてありがとう。本に戻って答えを見つけようとします。

2012 年 11 月 2 日追加 (下に結果が見つからない処理を追加することで、問題の一部を修正できることはわかっています。

4

2 に答える 2

1

空の結果クエリには別のプロセスが必要だと思います。問題は「2語以上」ではなく、検索結果が空の場合です。このようなものを試してください

$Recordset1 = mysql_query($query_limit_Recordset1, $main) or die(mysql_error());
$num_rows = mysql_num_rows($Recordset1 );
if($num_rows == 0){
   //error message
}
else{
   //process here
}
于 2012-10-23T03:54:09.877 に答える
1

を検索しましFool on the hillたが、これは 2 つ以上の単語であり、うまくいきました。そして、Fill on the billあなたが話しているエラーを出しました。

ERROR : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

検索語がデータベース内のレコードに一致しない場合に、空の行が返されるケースを処理する必要があることを意味します。

于 2012-10-23T03:58:57.243 に答える