我正在尝试使用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]);