【问题标题】:mysql_fetch cannot collect all the data in databasemysql_fetch 无法收集数据库中的所有数据
【发布时间】:2013-01-18 05:31:43
【问题描述】:

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

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

注意,

我使数据库中的所有数据都一样

【问题讨论】:

标签: php mysql select


【解决方案1】:

你必须在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?

注意

  1. 整个ext/mysql PHP 扩展,它提供所有以前缀mysql_ 命名的函数,是officially deprecated as of PHP v5.5.0,将来会被删除。所以使用PDOMySQLi

好读

  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

我希望这会有所帮助。

【讨论】:

  • 也在 if 函数不是吗?顺便说一句 +1
  • 感谢 NullPointer 编辑 :)
  • 欢迎您..只是尽量不给出重复的答案...所以改进了现有的答案..
【解决方案2】:

获取的结果将是一个数组。它将包含所有匹配的数据库条目。但是你的回声就在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>
<?
}

【讨论】:

    猜你喜欢
    • 2015-11-09
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多