1

仕組み:アルバムをクリックすると、「album.php?id =#」に移動します。

//initialize some vars
$albumID = '';

//check what photo we are looking for
if(isset($_GET['id'])){
    $albumID = mysql_real_escape_string($_GET['id']);

クエリ:

$sql = mysql_query(
SELECT *
FROM albums
JOIN songs
ON albums.performer=songs.performer
WHERE albums.albumID='albumID'
);

私が達成しようとしていたのは、アルバムとトラックリストを表示させることです。誰かが私がこの問題を修正する方法を知っていますか?ありがとうございました。

4

3 に答える 3

3
$sql = mysql_query('
SELECT *
FROM albums
JOIN songs
ON albums.performer=songs.performer
WHERE albums.albumID="'.$albumID.'"');
于 2012-05-17T23:32:24.460 に答える
2

またisset()、渡された変数を使用するだけでは曖昧であることに注意する必要があります。具体性をチェックし、渡される値の型を常に把握しておく必要があります。

整数、数値、または両方の組み合わせのみを許可する場合:

if(isset($_GET['id']))そのセットをチェックするだけで、これも空白の値になる可能性があります。

if(!empty($_GET['id']))これはそのセットをチェックし、値も持っています

if(!empty($_GET['id']) && is_numeric($_GET['id']))上記の and はすべて数値です。

この話の教訓は、ユーザー入力が正しいタイプであると決して信用してはならないということです。

于 2012-05-17T23:47:04.887 に答える
2

クエリを文字列に配置することから始めます。

$query = "SELECT * FROM albums JOIN songs ON albums.performer=songs.performer";

次に、アルバムが存在する場合は、そのクエリに追加します。

if ( !empty( $albumID ) ) {
  $query = $query . " WHERE albums.albumID = $albumID";
}

この時点で、先に進んでクエリを実行できます。

$result = mysql_query( $query ) or die( mysql_error() );

を使用してクエリを実行し、mysql_queryその結果を$result変数に渡します。クエリのエラーなど、何か問題が発生した場合、プログラムはdieになり、最新mysql_error()のものが画面に出力されます。

変数を使用$resultして、循環して結果を出力できるようになりました。

while ( $row = mysql_fetch_object( $result ) ) {
  echo $row->columnA
}

columnAはプレースホルダーであり、データベースに保存した列名を実際に書き込む必要があることに注意してください。

于 2012-05-17T23:50:24.747 に答える