我觉得我在这里遗漏了一些愚蠢的东西,我试图获得SQL查询的结果,然后在循环中使用它们。我觉得我错过了一些愚蠢明显的东西,我已经尝试过,有没有注释掉的线。
<?php
$sentToID = $_SESSION['userID'];
$query = "SELECT *
FROM messages
WHERE sentToID = '$sentToID'";
$results = mysql_query($query);
//$userData = mysql_fetch_array($results, MYSQL_ASSOC);
foreach ($results as $result){
$messageID = $result['messageID'];
$sentFromID = $result['sentFromID'];
$subject = $result['subject'];
$body = $result['body'];
$dateTime = $result['dateTime'];
$query = "SELECT usertype
FROM user
WHERE userID = '$sentFromID'";
$messageResult = mysql_query($query);
$messageData = mysql_fetch_array($messageResult, MYSQL_ASSOC);
$usertype = $messageData['usertype'];
$query = "SELECT *
FROM $usertype
WHERE userID = '$sentFromID'";
$messageResult = mysql_query($query);
$messageData = mysql_fetch_array($messageResult, MYSQL_ASSOC);
if ($usertype == "jobseeker"){
$forname = $messageData['forename'];
$surname = $messageData['surname'];
echo "<div><p>" . $forename . " " . $surname . "</p>
<p>Subject: " . $subject ."</p>
<p>Body: " . $body . "</p></div>";
}
if ($usertype == "employer"){
$forname = $messageData['forename'];
$surname = $messageData['surname'];
$companyName = $messageData['companyName'];
echo "<div><p>" . $forename . " " . $surname . " - " . $companyName . "</p>
<p>Subject: " . $subject ."</p>
<p>Body: " . $body . "</p></div>";
}
}
?>
非常感谢任何帮助
答案 0 :(得分:4)
您必须先将结果提取到数组中。看起来你已经开始这样做但是评论了它。
$results = mysql_query($query);
//$userData = mysql_fetch_array($results, MYSQL_ASSOC);
$resultset = array();
while ($row = mysql_fetch_array($results)) {
$resultset[] = $row;
}
// $resultset now holds all rows from the first query.
foreach ($resultset as $result){
//... etc...
答案 1 :(得分:4)
而不是您的foreach()
,您应该这样做(有关详情,请参阅mysql_query() manual page):
while($result = mysql_fetch_assoc($results)) {
// your code
}
答案 2 :(得分:1)
另一个选项
$num_rows = mysql_num_rows($result)
for ($i=0;$i<$num_rows;$i++) {
$row = mysql_fetch_assoc($result)
$messageID = $row['messageID'];
}
你可以从这里做任何事情。
记住, 1-查询对象,如$ result 2-一次从对象获取行到一个数组中,该数组反映了表中的整行,给定了具有关联键或数字的查询定义 3-用数组做某事
您将逐行遍历对象并将$ row作为数组放入。
干杯
答案 3 :(得分:1)
我没有评论的声誉,上述答案是正确的,但php mysql_query() manual page表示
此扩展在PHP 5.5.0中已弃用,并已在PHP中删除 7.0.0。相反,应该使用MySQLi或PDO_MySQL扩展
所以现在正确的方法是:
while($result = mysqli_fetch_assoc($results)) {
// your code
}
答案 4 :(得分:0)
$ results = mysql_query($ query); 的返回类型是对象类型的资源。例如:
object(mysqli_result)#3 (5) {
["current_field"] => int(0)
["field_count"] => int(3)
["lengths"] => NULL
["num_rows"] => int(2)
["type"] => int(0)
}
因为,我们只对表格数据感兴趣。我们已经将资源传递给mysql_fetch_array()
以及用于处理结果表的其他函数,以根据PHP Docs
我们不能直接使用它。
但是,如果您在理解while循环的内部工作时遇到问题,我将举一个例子。
<?php
$s = 0;
class deepe {
function dis(){
$a = array(2,3,4,5,6);
$b = $GLOBALS['s'];
if ( $b < count($a) )
return $a[$b];
}
}
$chk = new deepe();
while($fac = $chk->dis())
{
echo $fac."<br />";
$GLOBALS['s']++;
}
?>