mysql_fetch无法收集数据库中的所有数据

时间:2013-01-18 05:31:44

标签: php mysql select

我这里有一个代码,用于从数据库中选择所有数据,这是我的代码:

<?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

请注意,

我使数据库中的所有数据都相同

2 个答案:

答案 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攻击,您需要撤消所有getpost,更好的方法是使用Prepared statement

好读

  1. How to prevent SQL injection in PHP?
  2. Are PDO prepared statements sufficient to prevent SQL injection?

  3. 注意

    1. 整个 ext/mysql PHP扩展程序(提供名为mysql_的所有函数)为officially deprecated as of PHP v5.5.0,将来会被删除。因此,请使用PDOMySQLi
    2. 好读

      1. The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead
      2. PDO Tutorial for MySQL Developers
      3. Pdo Tutorial For Beginners
      4. 我希望这有帮助。

答案 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>
<?
}