我正在尝试使用xcode中的php脚本从三个不同的表(MySQL)获取数据。

我知道如何从一个表中获取元素,但是我不知道如何扩展此方法,以便能够使用相同的php脚本和xcode中的NSURLSession从另外两个表中获取数据。

我的一张表的php脚本(工作):

$mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno(). ') ' . mysqli_connect_error());
}

$sql = "SELECT * FROM table1";
$test = $mysqli->query($sql);
$Nrows = $test->num_rows;
$resultArray = array();

if ($result = mysqli_query($mysqli, $sql)) {
    while ($row = $result->fetch_assoc()) {
        $resultArray[] = $row;
    }
    echo json_encode($resultArray);
}
else {
    echo 'oups.';
}


现在的问题是,我想对另外两个表执行相同的操作。我试图将获取方法合并到一个单独的php文件中(例如getElementFunction.php),并在主文件中调用此方法:

getElementFunction.php

<?php
function getElements()
{
    $test = $mysqli->query($sql);
    $Nrows = $test->num_rows;
    $resultArray = array();

    if ($result = mysqli_query($mysqli, $sql)) {
        while ($row = $result->fetch_assoc()) {
            $resultArray[] = $row;
        }
        echo json_encode($resultArray);
    }
    else {
        echo 'oups.';
    }
}
?>


main_file.php:

$mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno(). ') ' . mysqli_connect_error());
}

include 'getElementFunction.php';

$sql = "SELECT * FROM table1";
getElements() // --> how can I flag the json object as being returned from table 1

$sql = "SELECT * FROM table2";
getElements() // --> how can I flag the json object as being returned from table 2

$sql = "SELECT * FROM table3";
getElements() // --> how can I flag the json object as being returned from table 3


但是我不知道它是否正确,以及如何“标记”将返回的不同json对象以便在我的xcode脚本中使用。我想只用一个URL在一个循环中运行获取过程。

以防万一,我的Objective-C脚本中需要一种方法来指定从哪个表返回的json对象...

带有NSURLSession的XCODE脚本:

id jsonObject = [NSJSONSerialization JSONObjectWithData:_downloadedData options:NSJSONReadingAllowFragments error:&error];

        if ([jsonObject isKindOfClass:[NSArray class]]) {

            NSArray *deserializedArray = (NSArray *)jsonObject;

            if (deserializedArray.count > 0) {

                dispatch_async(dispatch_get_main_queue(), ^{

                    ...
                }


如果有人可以帮助我...

谢谢!

最佳答案

不确定是否清楚地理解..但是您可以在getElements()中尝试foreach。

我的意思是 :

function getElements(array $allSQL)
{
    //Final array to json_encode
    $finalResultsArray = array();

    foreach($allSQL as $tableName => $sqlStatement) {
            $arrayResults = array();

            $test = $mysqli->query($sqlStatement);
            $Nrows = $test->num_rows;

            if ($result = mysqli_query($mysqli, $sqlStatement)) {
                while ($row = $result->fetch_assoc()) {
                    $arrayResults[] = $row;
                }
                //echo json_encode($arrayResults);
                $finalResultsArray[$tableName] = $arrayResults;
            }
            else {
                echo 'oups.';
            }

    }

    echo json_encode($finalResultsArray);
}


而这部分:

$sql = "SELECT * FROM table1";
getElements() // --> how can I flag the json object as being returned from table 1

$sql = "SELECT * FROM table2";
getElements() // --> how can I flag the json object as being returned from table 2

$sql = "SELECT * FROM table3";

getElements() // --> how can I flag the json object as being returned from table 3


成为这个:

$sql1 = "SELECT * FROM table1";

$sql2 = "SELECT * FROM table2";

$sql3 = "SELECT * FROM table3";

getElements(["table1"=> $sql1, "table2" => $sql2, "table3" => $sql3]);

10-07 19:38
查看更多