PHP变量获取数据库中的最后一个对象而不是所有对象

时间:2017-01-15 01:42:05

标签: php json

首先,对不起,如果标题已关闭......这是我能想到的最好的问题,我面临的问题。

在我的数据库中,我有一个应用列表。在PHP中,我从他们的密钥中提取数据,并将这些数据编码为JSON以打印出来(我正在制作API)。

但是,只有最后一个应用程序以JSON打印出来。我需要的是一个JSON数组,其中包含任何具有相同键的应用程序,以便稍后我可以循环遍历它们并打印出它们的数据。

我的代码:

$getApp = "SELECT * FROM tundra.apps WHERE app_key = '" . $api_key . "'";
$appData = $dbConnection->query($getApp);

if ($appData->num_rows > 0){ // Check if app_key exists
    while($row = $appData->fetch_assoc()) { // While retrieving rows
        $jsonApp = json_encode(array( // Encode the row data
            "app_name" => $row['app_name'],
            "app_theme" => array(
                "primary_color" => $row['app_primary_color'],
                "primary_color_dark" => $row['app_primary_dark_color'],
                "accent_color" => $row['app_accent_color'],
            ),
            "app_navigation" => $row['app_navigation'],
            "author_info" => array(
                "author_name" => $row['app_author_name'],
                "author_bio" => $row['app_author_bio'],
                "links" => array(
                    "website" => $row['app_author_website'],
                    "googleplus" => $row['app_author_gplus'],
                    "twitter" => $row['app_author_twitter'],
                    "dribble" => $row['app_author_dribble'],
                    "behance" => $row['app_author_behance'],
                )
            ),
            "app_status" => $row['app_status']
        ), JSON_UNESCAPED_SLASHES);
    }
    // Format and print JSON data
    echo "<pre>" . prettyPrint($jsonApp) . "</pre>";
} else { // No key found, encode error
    $jsonError = json_encode(
    array(
        array(
            "error" => array(
                "code" => "8",
                "message" => "Invalid API key specified"
            )
        )
    ), JSON_UNESCAPED_SLASHES);
    echo "<pre>" . prettyPrint($jsonError) . "</pre>";
}

对于上面的内容,我尝试在while循环中回显JSON数据,但是(如预期的那样)为每一行打印<pre>

以下是上述代码的JSON输出:

{
    "app_name":"Andrew's Second App",
    "app_theme":{
        "primary_color":"#FFFFFF",
        "primary_color_dark":"#E0E0E0",
        "accent_color":"#E91E63"
    },
    "app_navigation":"0",
    "author_info":{
        "author_name":"Andrew Quebe",
        "author_bio":"I'm a developer of stuff.",
        "links":{
            "website":"http://www.andrewquebe.com",
            "googleplus":"https://plus.google.com/+AndrewQuebe",
            "twitter":"https://twitter.com/andrew_quebe",
            "dribble":"None",
            "behance":"None"
        }
    },
    "app_status":"1"
}

注意:数据格式完美,但我需要数据在数组中,我不确定如何执行此操作。

4 个答案:

答案 0 :(得分:1)

在您的while循环中,您不断地将值重新设置为$jsonApp。我建议添加更多这样的值:

$getApp = "SELECT * FROM tundra.apps WHERE app_key = '" . $api_key . "'";
$appData = $dbConnection->query($getApp);

if ($appData->num_rows > 0){ // Check if app_key exists
    for($i=0;$row = $appData->fetch_assoc();i++) { // While retrieving rows
        $jsonApp[i] = array( // Encode the row data
            "app_name" => $row['app_name'],
            "app_theme" => array(
                "primary_color" => $row['app_primary_color'],
                "primary_color_dark" => $row['app_primary_dark_color'],
                "accent_color" => $row['app_accent_color'],
            ),
            "app_navigation" => $row['app_navigation'],
            "author_info" => array(
                "author_name" => $row['app_author_name'],
                "author_bio" => $row['app_author_bio'],
                "links" => array(
                    "website" => $row['app_author_website'],
                    "googleplus" => $row['app_author_gplus'],
                    "twitter" => $row['app_author_twitter'],
                    "dribble" => $row['app_author_dribble'],
                    "behance" => $row['app_author_behance'],
                )
            ),
            "app_status" => $row['app_status']
        );
    }
    $json = json_encode($jsonApp,JSON_UNESCAPED_SLASHES);
    // Format and print JSON data
    echo "<pre>" . prettyPrint($json) . "</pre>";
} else { // No key found, encode error
    $jsonError = json_encode(
    array(
        array(
            "error" => array(
                "code" => "8",
                "message" => "Invalid API key specified"
            )
        )
    ), JSON_UNESCAPED_SLASHES);
    echo "<pre>" . prettyPrint($jsonError) . "</pre>";
}

这应该显示一个JSON数组,数组中的每个元素代表一个单独的app条目。

答案 1 :(得分:1)

问题是,您在json_encode()循环的每次迭代中都应用了while()函数,而且还要覆盖$jsonApp in {每次迭代。这就是为什么你 输出的原因。

解决方法是,在while()循环之外创建一个空结果数组。在while()循环的每次迭代中,将数组数组推入结果数组中。最后,在退出循环后,在结果数组上应用json_encode()函数并显示它。

所以你的代码应该是这样的:

// your code

if ($appData->num_rows > 0){ // Check if app_key exists
    $resultArr = array();
    while($row = $appData->fetch_assoc()) { // While retrieving rows
        $resultArr[] = array( // Encode the row data
            "app_name" => $row['app_name'],
            "app_theme" => array(
                "primary_color" => $row['app_primary_color'],
                "primary_color_dark" => $row['app_primary_dark_color'],
                "accent_color" => $row['app_accent_color'],
            ),
            "app_navigation" => $row['app_navigation'],
            "author_info" => array(
                "author_name" => $row['app_author_name'],
                "author_bio" => $row['app_author_bio'],
                "links" => array(
                    "website" => $row['app_author_website'],
                    "googleplus" => $row['app_author_gplus'],
                    "twitter" => $row['app_author_twitter'],
                    "dribble" => $row['app_author_dribble'],
                    "behance" => $row['app_author_behance'],
                )
            ),
            "app_status" => $row['app_status']
        );
    }
    $jsonApp = json_encode($resultArr, JSON_UNESCAPED_SLASHES);
    // Format and print JSON data
    echo "<pre>" . prettyPrint($jsonApp) . "</pre>";
} else { // No key found, encode error
    $jsonError = json_encode(
    array(
        array(
            "error" => array(
                "code" => "8",
                "message" => "Invalid API key specified"
            )
        )
    ), JSON_UNESCAPED_SLASHES);
    echo "<pre>" . prettyPrint($jsonError) . "</pre>";
}

答案 2 :(得分:0)

我相信这是因为在你的例子的第6行,你将json_encode的输出分配给$ jsonApp变量。使用像这样的数组会更容易。

$jsonApp[] = array(

然后在最后使用json_encode。

echo "<pre>" . prettyPrint(json_encode($jsonApp)) . "</pre>";

答案 3 :(得分:0)

这是JSON的格式。您无法输出不同的形状。但是,在解码此JSON输出时,您可以解码objcet或array。

$object = json_decode($json);

$array = json_decode($json, true);