2013-05-03 52 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); 
}