在foreach循环中使用SQL结果

时间:2011-12-16 18:27:24

标签: php mysql foreach

我觉得我在这里遗漏了一些愚蠢的东西,我试图获得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>";
    }
}
?>

非常感谢任何帮助

5 个答案:

答案 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']++;
    }

?>