2013-05-03 3 views
0

В настоящее время я ищу базу данных MySQL для получения результатов на основе входного значения. Как только данные были вытащены, они включаются в массив и кодируются JSON.PHP - массив базы данных для JSON

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

Например. если я введу букву «e» в форму поиска в конце, это должно получить все результаты, содержащие букву «e», однако она получает первый результат с буквой «e», а не зацикливается через таблицу ввода (там 3 других результата, которые следует вытащить).

Есть ли способ изменить текущий код для правильного цикла и получить все результаты, соответствующие запросу?

$search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']); 
$search_string = $search_db->real_escape_string($search_string); 

if (strlen($search_string) >= 1 && $search_string !== ' ') { 
    $query = 'SELECT kbarticleid,subject FROM swkbarticles WHERE subject LIKE "%'.$search_string.'%"'; 
    $initial = $search_db->query($query); 

    while($results = $initial->fetch_array()) { 
     $result_array['kbarticleid'] = $results['kbarticleid']; 
     $result_array['subject'] = $results['subject']; 
    } 

    $match = $result_array['kbarticleid']; 

    $queryf = "SELECT * FROM swkbarticlelinks WHERE kbarticleid = '$match'"; 
    $final = $search_db->query($queryf); 

    while($results2 = $final->fetch_array()) { 
     $result_array['linktype'] = $results2['linktype']; 
    } 

    echo json_encode($result_array); 
} 

Есть 2 запроса к базе данных, так как мне нужно пробежать 2 разных таблицы.

+2

Расширение PHP mysql теперь устарело, рассмотрите использование ** PDO_MYSQL ** или ** MYSQLi **. – fardjad

+1

Что делает var_dump ($ result); Распечатать? – Fabio

+0

@fardjad Где в коде он использует расширение mysql? –

ответ

0

Пожалуйста, измените следующую строку

$search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']); 
$search_string = $search_db->real_escape_string($search_string); 

if (strlen($search_string) >= 1 && $search_string !== ' ') { 
    $query = 'SELECT kbarticleid,subject FROM swkbarticles WHERE subject LIKE "%'.$search_string.'%"'; 
    $initial = $search_db->query($query); 

    while($results = $initial->fetch_array()) { 
     $result_array['kbarticleid'][] = $results['kbarticleid']; 
     $result_array['subject'][] = $results['subject']; 
    } 

    $match_detail = $result_array['kbarticleid']; 

    foreach($match_detail as $match){ 
     $queryf = "SELECT * FROM swkbarticlelinks WHERE kbarticleid = '$match'"; 
     $final = $search_db->query($queryf); 

     while($results2 = $final->fetch_array()) { 
      $result_array['linktype'][] = $results2['linktype']; 
     } 
    } 

    echo json_encode($result_array); 
} 
+0

Привет, Эльби, я попробовал, но не повезло. – JPDP

+0

@JPDP Сколько результатов получится в этой строке $ match = $ result_array ['kbarticleid']; – Elby

+0

Эта строка получает только 1, однако она должна получить как можно больше результатов. – JPDP

-1

Попробуйте этот код.

$search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']); 
$search_string = $search_db->real_escape_string($search_string); 

$result_array = array(); 
if (strlen($search_string) >= 1 && $search_string !== ' ') { 

    $query = 'SELECT kbarticleid,subject FROM swkbarticles WHERE subject LIKE "%'.$search_string.'%"'; 
    $initial = $search_db->query($query); 

    $i = 0; 
    while($results = $initial->fetch_array()) { 
     $result_array[$i]['kbarticleid'] = $results['kbarticleid']; 
     $result_array[$i]['subject'] = $results['subject']; 

     $queryf = "SELECT * FROM swkbarticlelinks WHERE kbarticleid = '".$results['kbarticleid']."'"; 
     $final = $search_db->query($queryf); 


     while($results2 = $final->fetch_array()) { 
      $result_array[$i]['linktype'][] = $results2['linktype']; 
     } 
     $i++; 
    } 

    echo json_encode($result_array); 
} 
Смежные вопросы