-1

我在数据库上有 2 个表,表“歌曲”和“流派”。

  • 表“歌曲”有 3 列:id_song (PK)、song_title、lyric、id_genre
  • 表“流派”有 2 列:id_genre (PK)、流派

在表“流派”中,我有:

|| id_genre | 流派 ||

||........1........|..pop...||

||........2........|..摇滚..||

||........3.......|..爵士...||

||.......4.......|.经典。||

2张表之间的关系:

song.id_genre FK 到genre.id_genre

我有一个这样的变量:

$search_genre = 'pop';

我想搜索歌曲$search_genre

$query = mysql_query("SELECT song.id_song, song.song_title, genre.genre FROM song WHERE genre='$search_genre' INNER JOIN genre ON song.id_genre=genre.id_genre ORDER BY id_song");

但是,它不起作用。我应该怎么办?谢谢你的帮助。

问题2:如何在php中显示结果?

4

3 回答 3

7

第一的!

请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

第二!

如果您已经开始mysql_*至少转义您的参数!否则,您将留下一个巨大的 SQL 注入安全漏洞,等待下一个想成为 l33t 的黑客入侵您的网站!

$search_genere = mysql_real_escape_string($search_genere);
$query = mysql_query("SELECT song.id_song, song.song_title, genre.genre FROM song INNER JOIN genre ON song.id_genre=genre.id_genre WHERE genre.genre='".$search_genre."' ORDER BY id_song");

但请务必阅读上方框中的链接。

您遇到此错误的原因是语法错误。

于 2013-05-14T07:54:48.563 回答
-2

您的JOIN查询是错误的,您使用INNER JOINFROM

尝试这个:

 $query = mysql_query("SELECT song.id_song, song.song_title, genre.genre FROM song INNER JOIN genre ON song.id_genre=genre.id_genre WHERE genre='%$search_genre%'  ORDER BY id_song");

如果您查询搜索,您可以使用wildcards例如%

例如

query = mysql_query("SELECT song.id_song, song.song_title, genre.genre FROM song INNER JOIN genre ON song.id_genre=genre.id_genre WHERE genre='%$search_genre%'  ORDER BY id_song");
于 2013-05-14T07:47:12.547 回答
-3
    $query = mysql_query("SELECT song.id_song, song.song_title, genre.genre FROM song INNER JOIN genre ON song.id_genre=genre.id_genre WHERE genre.genre='".$search_genre."' ORDER BY id_song");

    use this.it will work.

if(mysql_num_rows($query) > 0){
   while($row = mysql_fetch_array($query)){
     echo $row['id_song'];//song id
     echo $row['song_title'];//song title
     echo $row['genre'];//song genre
   }
}
于 2013-05-14T07:48:36.990 回答