我正在尝试从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;
}
?>
答案 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。