2013-05-03 4 views
0

Je suis actuellement à la recherche d'une base de données MySQL pour les résultats basés sur une valeur d'entrée. Une fois les données extraites, elles sont incluses dans un tableau et encodées en JSON. À l'heure actuelle, le code fonctionne comme prévu, mais il ne parcourt pas tous les résultats de la base de données. Il tire simplement les premiers résultats contenant les données d'entrée, même si plusieurs résultats correspondent.PHP - Database Array to JSON

Par exemple. si je saisis la lettre "e" dans le formulaire de recherche, tous les résultats contenant la lettre "e" doivent être récupérés, mais le premier résultat est obtenu avec la lettre "e" plutôt que la boucle sont 3 autres résultats qui devraient être tirés).

Y at-il un moyen de modifier mon code actuel pour boucler correctement et obtenir tous les résultats qui correspondent à la requête?

$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); 
} 

Il y a 2 requêtes de base de données car je dois parcourir 2 tables différentes.

+2

L'extension PHP mysql est maintenant obsolète, pensez à utiliser ** PDO_MYSQL ** ou ** MYSQLi **. – fardjad

+1

Que fait var_dump ($ result); impression? – Fabio

+0

@fardjad Où dans le code il utilise l'extension mysql? –

Répondre

0

S'il vous plaît changer votre ligne comme suit

$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

Salut Elby, j'ai essayé, mais pas de chance. – JPDP

+0

@JPDP Combien de résultats obtiendront dans cette ligne $ match = $ result_array ['kbarticleid']; – Elby

+0

Cette ligne n'obtient qu'une seule valeur, mais elle devrait recevoir autant de résultats. – JPDP

-1

Essayez ce code.

$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); 
}