通过PHP简单的MySQL查询

时间:2012-09-27 15:40:59

标签: php mysql database

我有一个包含大约500,000行的表,需要查询它以检索结果。基本上用户只输入一个案例编号,然后我想执行以下查询并使用while循环显示结果

if (!empty($_POST["casenum"])) {
    $result2 = mysql_query("SELECT Box_Content.case_number, Transfer.number, Transfer.location, Box.number FROM Box_Content, Transfer, Box WHERE Box_Content.box_id = Box.id and Box.transfer_id = Transfer.id and Box_Content.case_number = '".$_POST['casenum']."'");

    while ($row = mysql_fetch_array($result2)) {
        echo "Case number: ".$casenum." text ";
        echo "<br />";
    }

} else {
    echo "<h4>WARNING!!! Search criteria entered not valid. Please search again.</h4>";
}

我在这里做错了什么?

编辑:

如果只返回一行,它现在可以正常工作,但是对于两行,似乎是在尝试打印整个表...

$casenum = $_POST["casenum"];
echo "<br />The case number entered is: $casenum<br />";

if (!empty($_POST["casenum"]))
        {
        $result2 = mysql_query("SELECT Box_Content.case_number, Transfer.number as transfer_number, Transfer.location as transfer_location, Box.number as box_number FROM Box_Content, Transfer, Box WHERE Box_Content.box_id = Box.id and Box.transfer_id = Transfer.id and Box_Content.case_number = '" . $_POST['casenum'] . "'");

        while($row = mysql_fetch_array($result2))
                {
                print_r ($row);
                echo "<br />";
                echo "<b>Case number: </b>" . $row['case_number'] ."<br />";
                echo "<b>Transfer number: </b>" . $row['transfer_number'] ."<br />";
                echo "<b>Transfer location: </b>" . $row['transfer_location'] ."<br />";
                echo "<b>Box number: </b>" .$row['box_number'] ."<br />";
                }
}

else
        {
        echo "<h4>WARNING!!! Search criteria entered not valid. Please search again.</h4>";
        }

var_dump($_POST);

3 个答案:

答案 0 :(得分:2)

尝试:

    while ($row = mysql_fetch_array($result2)) {
        echo "Case number: ". $row['Box_Content.case_number'] ." text ";
        echo "<br />";
    }

$row['case_number']将输出结果集中每行检索到的case_number

但是,您应该考虑做以下两件事之一:

  1. 开始使用最佳做法。
  2. 开始使用未弃用的SQL库(mysqli,PDO)。
  3. 此查询易受SQL注入影响:

    "SELECT Box_Content.case_number, Transfer.number, Transfer.location, Box.number
         FROM Box_Content, Transfer, Box
         WHERE Box_Content.box_id = Box.id and Box.transfer_id = Transfer.id
         and Box_Content.case_number = '".$_POST['casenum']."'"
    

    使用mysql_real_escape_string($_POST['casenum'])修补此问题。

    参考http://php.net/manual/en/function.mysql-real-escape-string.php

    由于语句操作无准备,mysql_*函数早已被弃用。改为为项目选择mysqliPDO

答案 1 :(得分:0)

我在这里做错了什么?

1)你的代码中没有设置$ casenum ...(请告诉我它没什么,你没有注册超级全局?!)你可能想要$row['case_number']

2)但无论如何,这并不是你做错了什么......你最大的错误是使用用户输入而没有任何验证或消毒......

想象一下,如果$_POST["casenum"]等于......

' or 1=2 union select user,password,email,salt from users

答案 2 :(得分:0)

您似乎无处不在使用$casenum

尝试:

while($row = mysql_fetch_assoc($result2))
   echo "Case number: ".$row['number']." text <br />";

当使用mysql_fetch函数时,assoc会带回命名索引数据,num会带回数字索引数据,数组会带回两者,所以尽量使用其中一种。

然后当你执行$row = mysql_fetch_assoc($result2)时,对于返回的每行数据,你基本上都在说它将它存储为$ row中的一个(在本例中是关联的)数组,这样你就可以通过标准数组命令访问你的数据了({ {1}})。