为什么只有从这个PHP数组返回的第一条记录?

时间:2014-04-07 09:01:22

标签: php

我正在尝试从MySQL数据库返回四条记录,但只返回第一条记录。我搜索过,但我不确定为什么会这样。有人能指出我正确的方向吗?

    <?php
session_start();
function displayImage($username){
    $imageDate  = $_POST['imageDate'];
    $result = mysql_query("
        SELECT
            imageName
        FROM
            images AS i
        INNER JOIN
            users AS u ON i.userID = u.UserID
        WHERE
            u.username = '$username'
        AND
            i.imageDate = '$imageDate'

    ") or die(mysql_error());

    //return a message to the users explaining ......
        if (!isset($_POST['Submit'])) {
            // this does nowt yet!!!
            $output = "Nothing selected yet.";
        }
        else {
        //This is a while loop to store the SQL results into ......
        $row = array(mysql_fetch_assoc($result));
        foreach ($row as $picName) {
        $cam = $_POST['cam'];
        $fullPath = $username . "/" . $cam . "/" . $picName['imageName'];
        // $output = //this works fine
                reset($images);
            }
        }
        var_dump($row);
        echo "<br />";
        return $output;
    }
?>

4 个答案:

答案 0 :(得分:6)

你应该使用循环来获取结果:

    while ($row = mysql_fetch_assoc($result)) {
        $cam = $_POST['cam'];
        $fullPath = $username . "/" . $cam . "/" . $row['imageName'];
    }

答案 1 :(得分:5)

正如其他人所说,你需要使用while循环,我已经整理了一些代码并添加了其他一些东西供你考虑。

实际原因是当你使用mysql_fetch_assoc时,它会返回一个结果资源并将其从它返回的资源中删除。因此,如果您只是尝试将其存储在数组中,那么您将获得数组中的第一个,而不是其他任何内容。当你使用while循环时,它的工作原理基本上是“如果mysql_fetch_assoc有东西可以提供,那么在循环中执行代码”。

<?php

session_start();

function displayImage($username) {
    // Also, as others have said, check out PDO, or MySQLi, as they
    // both provide a better interface with MySQL an have better
    // security features.
    $username  = mysql_real_escape_string($username);
    $imageDate = mysql_real_escape_string($_POST['imageDate']);

    $result = mysql_query("
        SELECT
            imageName
        FROM
            images AS i
        INNER JOIN
            users AS u ON i.userID = u.UserID
        WHERE
            u.username = '$username'
    AND 
            i.imageDate = '$imageDate'
    ") or die(mysql_error());

    //return a message to the users explaining
    if (!isset($_POST['Submit'])) {
        // this does nowt yet!!!
        $output = "Nothing selected yet.";
    } else {
        $cam = $_POST['cam'];

        $images = array(); // This is part of the "you could do something 
                           // like" further down.
        while ($row = mysql_fetch_assoc($result)) {
            $fullPath = $username . '/' . $cam . '/' . $row['imageName'];
            // $output = //this works fine
            var_dump($row);
            echo "<br />";

            // Or you could do something like:

            $images[] = $username . '/' . $cam . '/' . $row['imageName'];

            // Then outside of this while loop you'd have all of your image 
            // paths stored in this $images array. 
            // 
            // It depends on how you want to handle outputting them.
        }
    }

    return $output;
}

代码中的注释通过我的要点。

我还将$ cam = $ _POST ['cam']从循环内部移到了它的外部,因为它不需要进入循环,因为它的值总是相同的,无论是什么你要去哪个循环项目。

答案 2 :(得分:3)

使用mysql_fetch_assoc或mysql_fetch_array的方法是:

while ($row = mysql_fetch_assoc($result)) {
    // This is an example...
    echo $row["id"];
    echo $row["name"];
}

答案 3 :(得分:2)

如果您仍需要解释:

<强> 1。为什么你只有一个记录?

宣布:

$row=array(mysql_fetch_assoc($result));

这意味着您从数据库中获取一条记录,mysql_fetch_assoc()方法只运行一次,因此您的方法从数据库表中调用1行。

<强> 2。如何让这个工作?

就像你在别人给出的例子中看到的那样,改为使用while循环。

2.1循环如何工作?

致电时:

     while (<some command1 equates to true or false>) {<some command2>}

首先他们运行somecommand1。如果返回true,请执行一些command2。在command2完成后,再次运行somecommand1。如果它仍然是,请执行somecommand2,依此类推......一个很好的例子就是你正在使用的命令。

     while ($row = mysql_fetch_assoc($result))
     {
         echo $row['fieldname1'];
         echo $row['fieldname2'];
     }

在这个循环中,$ row = mysql_fetch_assoc($ result)是Somecommand1,如上所述。如果从数据库返回另一行,则此函数返回等于true的资源。在while循环中运行代码之后,它会跳到下一行。然后它重新运行mysql_fetch_assoc函数。如果表中仍有一些与查询匹配的记录,则此函数仍将执行while循环中的任何操作。

如果您需要更多示例,请查看w3schools.com。我从那里开始PHP。