我有一个包含大约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);
答案 0 :(得分:2)
尝试:
while ($row = mysql_fetch_array($result2)) {
echo "Case number: ". $row['Box_Content.case_number'] ." text ";
echo "<br />";
}
$row['case_number']
将输出结果集中每行检索到的case_number
。
但是,您应该考虑做以下两件事之一:
此查询易受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
答案 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}})。