1

我正在制作一个 iphone 应用程序。该应用程序的一部分允许用户在本地搜索公司。

我有一个 MySql 数据库,其中包含可以搜索的公司,我的网站上有一个 php 文件来接收搜索的数据,并将所有找到的公司的 companyName 和 companyLocation 返回到我的应用程序。它看起来像这样:

<?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 for dummies”一书,我已经多次更改我的代码,无论我尝试什么,它都会继续这样做。

有谁知道我应该怎么做才能获得一个包含所有使用此脚本找到的公司的数组,而不是这两个?

非常欢迎任何帮助,在此先感谢您!

4

1 回答 1

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将为空。您应该下定决心将结果回显给客户并保持一致。

于 2013-05-13T18:04:28.763 回答