2013-05-13 2 views
1

Я делаю приложение iphone. часть этого приложения позволяет пользователям искать компанию на месте.застрял в преобразовании вывода MySql в массив JSON с php

У меня есть база данных MySql, содержащая компании, которые можно найти, и файл php на моем веб-сайте для получения найденных данных, а также вернуть имя компании и название компании для всех найденных компаний в моем приложении. это выглядит так:

<?php 

if (isset($_GET["companyCitySearchField"])){ 
       $companyCity = $_GET["companyCitySearchField"]; 
       $result = search($companyCity); 
       echo $result; 
     } 

function makeSqlConnection() 
{ 
$DB_HostName = "******"; 
$DB_Name = "*******"; 
$DB_User = "*******"; 
$DB_Pass = "*******"; 


    $con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error()); 
    mysql_select_db($DB_Name,$con) or die(mysql_error()); 

    return $con; 
} 

function disconnectSqlConnection($con) 
{ 
    mysql_close($con); 
} 

function search($companyCity) 
{ 
    $con = makeSqlConnection(); 
    $query = mysql_query("SELECT companyName, companyCity from Company WHERE companyCity = '$companyCity'"); 
    $companies = array(); 
     while ($row = mysql_fetch_assoc($query)) { 
     $companies['companies'][] = $row; 
     print json_encode($companies); 
    } 
    disconnectSqlConnection($con); 
} 

?> 

это работает отлично, когда найдено только одну компанию. это дает мне идеальный массив JSON:

{"companies":[{"companyName":"Dijkstra","companyCity":"Geldermalsen"}]} 

все до сих пор.

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

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

{"companies":[{"companyName":"Dijkstra","companyCity":"Geldermalsen"}]}{"companies":[{"companyName":"Dijkstra","companyCity":"Geldermalsen"},{"companyName":"testaccount","companyCity":"Geldermalsen"}]} 

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

Я искал в Сети, StackOverflow, Google и даже книга «PHP и MySql для чайников» в течение нескольких дней, и я мой код много раз изменился, и все, что я стараюсь это продолжать делать это.

Кто-нибудь знает, что я должен сделать, чтобы получить один массив, содержащий все найденные компании с этим скриптом, а не эти 2?

любая помощь была бы очень желанной, заблаговременно!

ответ

0

Вы эхом отдаете JSON для каждой строки, а не для полностью построенного массива. Переместите свой оператор print вне цикла.

$companies = array(); 
    while ($row = mysql_fetch_assoc($query)) { 
    $companies['companies'][] = $row; 

} 
print json_encode($companies); 

Или еще лучше, вы не могли бы повторить что-нибудь вообще в функции поиска, но оставим это до вызывающего абонента. Кажется, вы уже могли бы намереваясь сделать это здесь:

$result = search($companyCity); 
echo $result; 

Единственная проблема заключается в том, что функция search() не возвращает никакого значения, так $result будет нулевым. Вы должны подумать о том, где вы собираетесь повторить результат для клиента и быть последовательным в этом.

+0

вы, сэр, только что сделали мой день. Спасибо большое! – Joris416

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