2015-10-30 2 views
-1

ive получил этот код и как-то он останавливается после первой записи, хотя должен быть еще больше. Если я возьму оба петли foreach, то все будет хорошо. Поэтому этот вопрос должен быть там, но им либо слепой или глупого :(Проблема с PHP ... выход останавливается после цикла

// Main Agenda 
$stmt = $mysqli->prepare(" 
SELECT 
agenda.id, 
agenda.title, 
agenda.timeStart, 
agenda.timeEnd, 
agenda.description, 
agenda.speakers, 
agenda.moderators, 
agenda_locations.name, 
agenda_days.dayDate, 
agenda_categories.name 
FROM agenda 
LEFT JOIN agenda_locations ON agenda.location = agenda_locations.id 
LEFT JOIN agenda_days ON agenda.dayDate = agenda_days.id 
LEFT JOIN agenda_categories ON agenda.category = agenda_categories.id 
WHERE agenda.active = '1' 
AND agenda.deleted = '0' 
ORDER BY agenda.timeStart ASC 
"); 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($agendaId, $agendaTitle, $agendaStart, $agendaEnd, $agendaDescription, $agendaSpeakers, $agendaModerators, $agendaLocation, $agendaDate, $agendaCategory); 

while ($stmt->fetch()) { 
    $speakersText = ""; 
    $moderatorsText = ""; 

    if(strlen($agendaSpeakers)>0){ 
     foreach(explode('###', $agendaSpeakers) as $speakerId) { 
      $stmt = $mysqli->prepare(" 
      SELECT 
      name 
      FROM speakers 
      WHERE id = ? 
      "); 
      $stmt->bind_param('i', $speakerId); 
      $stmt->execute(); 
      $stmt->store_result(); 
      $stmt->bind_result($speakerName); 
      $stmt->fetch(); 

      $speakersText .= $speakerName.", "; 
     } 
     $speakersText = substr_replace($speakersText, "", -2); 
    } 
    if(strlen($agendaModerators)>0){ 
     foreach(explode('###', $agendaModerators) as $moderatorId) { 
      $stmt = $mysqli->prepare(" 
      SELECT 
      name 
      FROM speakers 
      WHERE id = ? 
      "); 
      $stmt->bind_param('i', $moderatorId); 
      $stmt->execute(); 
      $stmt->store_result(); 
      $stmt->bind_result($moderatorName); 
      $stmt->fetch(); 

      $moderatorsText .= $moderatorName.", "; 
     } 
     $moderatorsText = substr_replace($speakersText, "", -2); 
    } 


    $var0 = $agendaId; 
    $var1 = stripslashes($agendaTitle); 
    $var2 = strtotime($agendaStart); 
    $var3 = strtotime($agendaEnd); 
    $var4 = stripslashes($agendaDescription); 
    $var5 = $speakersText; 
    $var6 = $moderatorsText; 
    $var7 = $agendaLocation; 
    $var8 = strtotime($agendaDate); 
    $var9 = $agendaCategory; 
    $agendaMain[] = array ($var0,$var1,$var2,$var3,$var4,$var5,$var6,$var7,$var8,$var9); 
} 
+0

Думают, что я видел, кто-то задает этот час назад ... HTTP.: //stackoverflow.com/questions/33443232/why-is-my-sum-query-breaking-my-loop/33443405#33443405 – ficuscr

+1

Вы действительно не должны хранить список идентификаторов в поле базы данных, разделенных символом '## # '. Используя стандартизованный дизайн таблицы (еще несколько таблиц в вашем случае, чтобы связать все вместе), вы можете получить нужную информацию в 1 или 2 запросах вместо запуска запросов в циклах. – jeroen

+0

эй, почему я не должен делать это именно его поле, где ma x 5 идентификаторов хранятся в ... – jQuery

ответ

1

Вы должны переименовать вам $stmt переменные в вашем Foreach петлях

+0

работал! спасибо - действительно довольно очевидный! – jQuery

+0

@ jQuery Тогда, пожалуйста, примите мой ответ. http://stackoverflow.com/help/someone-answers –

+0

пришлось ждать 5 минут, прежде чем делать так ха-ха ;-) – jQuery

Смежные вопросы