我这里有一个代码,用于从数据库中选择所有数据,这是我的代码:
<?php
$name = $_POST['cname'];
if ($_POST["Search"] == "Search") {
$query = mysql_query("SELECT * FROM parts WHERE cname LIKE '%$name%'");
if (!empty($query)) {
$vsi = 'No Data';
$date = 'No Data';
$cname = 'No Data';
}
while ($row = @mysql_fetch_array($query)) {
$vsi = $row["vsi"];
$date = $row["date"];
$cname = $row["cname"];
}
以下是我如何回应所有变量,
<tr class="gradeC">
<?php echo "<td width='10%'><font size='-2'> $vsi </font></td>" ?>
<?php echo "<td width='20%'><font size='-2'>$date</font></td>" ?>
<?php echo "<td width='20%'><font size='-2'> $cname</font></td>" ?>
</tr>
我的问题是,
我只从每一行得到一个结果,但我在数据库中的数据是5。
这是我的结果
vsi date name
123 12/12/2012 test1
但正确的结果应该是:
vsi date name
123 12/12/2012 test1
123 12/12/2012 test1
123 12/12/2012 test1
123 12/12/2012 test1
123 12/12/2012 test1
请注意,
我使数据库中的所有数据都相同
答案 0 :(得分:8)
你必须在while循环中使用TR。
<?php
$name = $_POST['cname'];
if ($_POST["Search"] == "Search") {
$query = mysql_query("SELECT * FROM parts WHERE cname LIKE '%$name%'");
if (!empty($query)) {
$vsi = 'No Data';
$date = 'No Data';
$cname = 'No Data';
}
while ($row = @mysql_fetch_array($query)) {
$vsi = $row["vsi"];
$date = $row["date"];
$cname = $row["cname"];
?>
<tr class="gradeC">
<?php echo "<td width='10%'><font size='-2'> $vsi </font></td>" ?>
<?php echo "<td width='20%'><font size='-2'>$date</font></td>" ?>
<?php echo "<td width='20%'><font size='-2'> $cname</font></td>" ?>
</tr>
<?
}
?>
您的代码容易受到sql injection攻击,您需要撤消所有get
和post
,更好的方法是使用Prepared statement
好读
ext/mysql
PHP扩展程序(提供名为mysql_的所有函数)为officially deprecated as of PHP v5.5.0,将来会被删除。因此,请使用PDO
或MySQLi
好读
答案 1 :(得分:0)
获取的结果将是一个数组。它将包含所有匹配的数据库条目。但是你的回声就在while循环之外。这就是为什么它只返回一个结果。在你的回声之后关闭第二个while循环。
while ($row = @mysql_fetch_array($query)) {
$vsi = $row["vsi"];
$date = $row["date"];
$cname = $row["cname"];
?>
<tr class="gradeC">
<?php echo "<td width='10%'><font size='-2'> $vsi </font></td>" ?>
<?php echo "<td width='20%'><font size='-2'>$date</font></td>" ?>
<?php echo "<td width='20%'><font size='-2'> $cname</font></td>" ?>
</tr>
<?
}