Использование результата SQL в цикле foreach - PullRequest
4 голосов
/ 16 декабря 2011

Мне кажется, что я упускаю что-то глупо очевидное, я пытаюсь получить результаты запроса 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>";
    }
}
?>

Любая помощь будет принята с благодарностью

Ответы [ 4 ]

5 голосов
/ 16 декабря 2011

Вместо вашего foreach() вы должны сделать что-то вроде этого (подробнее см. Справочную страницу mysql_query () ):

while($result = mysql_fetch_assoc($results)) {
    // your code
}
5 голосов
/ 16 декабря 2011

Сначала вы должны получить свои результаты в массив.Похоже, вы начали это делать, но закомментировали.

$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...
2 голосов
/ 17 мая 2016

У меня нет репутации, чтобы комментировать, и приведенные выше ответы верны, но страница руководства php mysql_query () говорит, что

это расширение устарело в PHP 5.5.0 и удалено в PHP 7.0.0. Вместо этого следует использовать расширение MySQLi или PDO_MySQL

Так что теперь правильный путь будет:

while($result = mysqli_fetch_assoc($results)) {
    // your code
}
2 голосов
/ 16 декабря 2011

другая опция

$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 как массив.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...