2013-05-03 86 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 2013-05-03 06:39:54

+1

var_dump($ result);打印? – Fabio 2013-05-03 06:42:29

+0

@fardjad在代碼中他使用mysql擴展的地方在哪裏? – 2013-05-03 06:53:19

回答

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

嗨,Elby,我已經試過了,但沒有運氣。 – JPDP 2013-05-03 06:33:05

+0

@JPDP在這一行中會得到多少結果$ match = $ result_array ['kbarticleid']; – Elby 2013-05-03 06:34:14

+0

該行只能得到1,但它應該得到儘可能多的結果返回。 – JPDP 2013-05-03 06:35:50

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