我的SQL回声匹配查询

时间:2015-04-12 02:28:48

标签: php mysql

您好我正在尝试打印匹配AlbumArtist匹配的所有匹配行。我这里有代码,但有些不对劲。我试过研究它但却找不到任何明显的东西。我认为我走在正确的轨道上。

这不是一个重复的问题。这不是问题的引用,因为即使我删除它们并更改了名称它仍然无法正常工作。

<form>
<h3>Please either search by Artist or Album:</h3>
    Artist: <input type="text" name="artist"><br /><br />
    Album: <input type="text" name="album"><br /><br />
    <input type="submit" value="Search Database" name="submit" />
</form>
<?php
    if(isset($_POST["submit"])){
        $con=mysql_connect('localhost','root','password') or die(mysql_error());    
        mysql_select_db('music') or die("cannot select DB");

        if(!empty($_POST['artist'])) {
            $name = $_POST['artist'];
            $sql = "SELECT * FROM 'artists' WHERE 'artists name' =".$name;
            $result = mysql_query($sql);
            while($row = mysql_fetch_array($result)) {
                echo $row['Album'] . ':' . $row['Artist Name'] . '<br />';
            }
        } else if(!empty($_POST['album'])) {
            $name = $_POST['album'];
            $sql = "SELECT * FROM 'albums' WHERE 'Album' =".$name;
            $result = mysql_query($sql);
            while($row = mysql_fetch_array($result)) {
                echo $row['Artists'] . ':' . $row['Album'] . '<br />';
            }
        } else {
            echo "<p>Please ente a search query</p>";
        }
    }
?>

谢谢!

1 个答案:

答案 0 :(得分:0)

使用反引号而不是引号来转义包含特殊字符的表名和列名。引号用于制作文字字符串。

另一个问题是您在WHERE子句中要比较的字符串需要放在引号中。并且您需要使用mysql_real_escape_string来阻止SQL注入(如果您升级到PDOmysqli并使用预准备语句会更好。

您需要使用<form method="post">,以便使用表单字段填写$_POST,或使用$_GET获取表单字段。您可以改为使用$_REQUEST,它可以使用任何一种形式。

<?php
    if(isset($_POST["submit"])){
        $con=mysql_connect('localhost','root','password') or die(mysql_error());    
        mysql_select_db('music') or die("cannot select DB");

        if(!empty($_POST['artist'])) {
            $name = $_POST['artist'];
            $sql = "SELECT * FROM `artists` WHERE `artist name` = '".mysql_real_escape_string($name)."'";
            $result = mysql_query($sql) or die(mysql_error());
            while($row = mysql_fetch_array($result)) {
                echo $row['Album'] . ':' . $row['Artist Name'] . '<br />';
            }
        } else if(!empty($_POST['album'])) {
            $name = $_POST['album'];
            $sql = "SELECT * FROM `albums` WHERE `Album` = '".mysql_real_escape_string($name)."'";
            $result = mysql_query($sql) or die(mysql_error());
            while($row = mysql_fetch_array($result)) {
                echo $row['Artists'] . ':' . $row['Album'] . '<br />';
            }
        } else {
            echo "<p>Please ente a search query</p>";
        }
    }
?>