2016-07-25 2 views
0

я это function:функция возвращает только одно значение несколько раз

function get_content($text_to_match) { 
    $query = "SELECT * "; 
    $query .= "FROM table_name "; 
    $query .= "WHERE one_column_name LIKE '%{$text_to_match}%' OR another_column_name LIKE '%{$text_to_match}%'"; 
    $cont = mysqli_query($connection, $query); 
    if($content = mysqli_fetch_assoc($cont)) { 
     return $content; 
    } else { 
     return null; 
    } 
} 

Но когда я называю это нравится:

<div> 
     <?php 
     for ($i = 1; $i < count(get_content("text_to_match")); $i++) { 
      echo '<article>' . 
       '<h3>' . get_content("text_to_match")["string1"] . '</h3>'. 
       '<p>' . get_content("text_to_match")["string2"] . '</p>' . 
       '</article>'; 
     } 
     ?> 
    </div> 

я получаю только первый матч в DB повторяется столько раз, сколько количество найденных предметов.

Где я пошла не так?

+0

то, что вы пытаетесь сделайте ... пожалуйста, укажите –

+0

mysqli_fetch_all? – splash58

+0

@raveenanigam, второе последнее предложение ясно указывает на намерение. – Dut

ответ

0

с некоторыми изменениями в сочетании с советами от @Anant и @Unix Ответ Один «s, я прибыл в этот рабочий раствор:

Определение функции

function get_content($text_to_match, $multiple=false) { 
     $query = "SELECT * "; 
     $query .= "FROM table_name "; 
     $query .= "WHERE one_column_name LIKE '%{$text_to_match}%' OR another_column_name LIKE '%{$text_to_match}%'"; 
     $cont = mysqli_query($connection, $query); 
     if ($multiple) { 
      $content_array = []; 
      while($content = mysqli_fetch_array($cont)) { 
      $content_array[] = $content; 
      } 
      return $content_array; 
     } else { 
      if($content = mysqli_fetch_assoc($cont)) { 
      return $content; 
      } else { 
      return null; 
      } 
     } 
    } 

Функция вызывает

<?php 
    /* multiple items */ 
    foreach(get_content("text_to_match", true) as $content) { 
    echo '<article>' . 
      '<h3>' . $content["string1"] . '</h3>' . 
      '<p>' . $content["string2"] . '</p>' . 
     '</article>'; 
    } 
?> 

<?php 
    /* one item */ 
    echo get_content("text_to_match")["string"]; 
?> 
0

использовать этот код затем получить данные правильно

while($content = mysql_fetch_array($cont)) 
{ 
    return $content; 

} 
+0

Не очень, удачная попытка – Dut

+0

@ На самом деле не так? Вы не помогаете себе вообще и не предоставляете какие-либо входы или выходы выборочных данных, чтобы помочь –

+0

@MikeMcMahon ВЫ ТРЕБУЕТСЯ. ДАЖЕ В МОЕМ ОТВЕТ, Я ДАЛ ВСЕ, но он не отвечает –

0

Ваша логика виновата. Вы вызываете функцию get_content для получения всех совпадений для цикла, а также для получения отдельных элементов из списка. Это:

  • плохая логика - второй вариант использования не имеет смысла
  • чрезмерными - вам не нужно, чтобы выполнить запрос к базе данных только для вывода результата уже извлекаться

Что вы, вероятно, хотите сделать это:

foreach (get_content('text_to_match') as $content) { 
    echo '<article>'; 
    echo '<h3>' . $content['string1'] . '</h3>'; 
    echo '<p>' . $content['string2'] . '</p>'; 
    echo '</article>'; 
} 
+0

не подходит для счета, взрывается! – Dut

+2

У меня нет вашего приложения для запуска, поэтому вам придется исправить все, что «взрывается». Я просто указываю на недостаток в вашей логике, чтобы помочь вам в решении проблемы. –

+0

Интегрированный в другие изменения, это полезно.К сожалению, я не могу выдвигать свою кандидатуру, и это неполное обозначение, как принято. – Dut

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