如何将自定义对象数组插入mysql数据库

时间:2013-07-12 11:41:06

标签: php iphone mysql objective-c arrays

我正在构建一个iOS应用,我允许用户浏览产品并订购它们。当用户点击订单时,我想保存他/她的用户名,电子邮件,地址,交付日期,当然还有他订购的产品数组到我的mysql数据库中。我需要能够看到我正在为企业制作的其他应用程序的订单。

保存用户名或地址等字符串不是问题,但保存产品数组(由自定义对象表示)似乎出错了。当我尝试在我的其他应用程序上下载它时,我的数据库不会返回它应该返回的数组,而我无法找出原因。

我的自定义对象具有以下属性:

itemName,itemCode,itemBarCode,itemCompany,itemPrice,itemQuantity,itemUserRemark,itemCompany,productImageNumber

每个变量都是一个字符串,该对象代表用户购物车中的一个项目(由orderProducts数组表示)。

我将订单发送到我的网络服务,如下所示:

NSString *orderToSend = [NSString stringWithFormat:@"http://www.imagine-app.nl/orderInsert.php?user=%@&orderAdressStreet=%@&orderAdressZip=%@&orderAdressNumber=%@&orderAdressCity=%@&paymentType=%@&orderDate=%@&orderDelivery=%@&orderProducts=%@&company=%@", orderClass.user, orderClass.orderAdressStreet, orderClass.orderAdressZip, orderClass.orderAdressNumber, orderClass.orderAdressCity, orderClass.orderPaymentType, orderClass.orderDate, orderClass.orderDelivery, orderClass.orderProducts, orderClass.company];
        NSString *strURL = [orderToSend stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        NSLog(@"connection %@", strURL);

和我的网络服务:

<?php

if (isset($_GET["user"]) && isset($_GET["orderAdressStreet"]) && isset($_GET["orderAdressZip"]) && isset($_GET["orderAdressNumber"]) && isset($_GET["orderAdressCity"]) && isset($_GET["paymentType"]) && isset($_GET["orderDate"]) && isset($_GET["orderDelivery"]) && isset($_GET["orderProducts"])  && isset($_GET["company"]) ){
                $user = $_GET["user"];
                $orderAdressStreet = $_GET["orderAdressStreet"];
                $orderAdressZip = $_GET["orderAdressZip"];
                $orderAdressNumber = $_GET["orderAdressNumber"];
                $orderAdressCity = $_GET["orderAdressCity"];
                $paymentType = $_GET["paymentType"];
                $orderDate = $_GET["orderDate"];
                $orderDelivery = $_GET["orderDelivery"];
                $orderProducts = $_GET["orderProducts"];
                $company = $_GET['company'];

                $result = insertOrder($user, $orderAdressStreet, $orderAdressZip, $orderAdressNumber, $orderAdressCity, $paymentType, $orderDate, $orderDelivery, $orderProducts, $company);
                echo $result;
                }

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


    $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 insertOrder($user, $orderAdressStreet, $orderAdressZip, $orderAdressNumber, $orderAdressCity, $paymentType, $orderDate, $orderDelivery, $orderProducts, $company)
{
    $con = makeSqlConnection();

    $sqlInsert = "INSERT INTO Orders (user, orderAdressStreet, orderAdressZip, orderAdressNumber, orderAdressCity, paymentType, orderDate, orderDelivery, orderProducts, company) VALUES ('$user', '$orderAdressStreet', '$orderAdressZip', '$orderAdressNumber', '$orderAdressCity', '$paymentType', '$orderDate', '$orderDelivery', '$orderProducts' , '$company');";

    $insertNewItems = mysql_query($sqlInsert,$con) or die(mysql_error());

    disconnectSqlConnection($con);  
}

?>

这似乎有效,因为所有对象都插入到我的数据库中。我的orderProducts数组,包含一个有序产品,插入一个像这样的单元格:

(    “” )

当我在我的业务方面应用程序上下载此订单时,我使用此代码:

on my server side:

    <?php

if (isset($_GET["company"])){
                $company = $_GET["company"];
                $result = getOrders($company);
                echo $result;
        }

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


    $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 getOrders($company)
{
    $con = makeSqlConnection(); 
    $query = mysql_query("SELECT * from items  WHERE company = '$company'");
    $ordersFromDatabase = array();
        while ($row = mysql_fetch_assoc($query)) {
        $orders['ordersFromDatabase'][] = $row;
    }   
    print json_encode($orders);
    $res = mysql_query($sql,$con) or die(mysql_error());
    echo $res;

        disconnectSqlConnection($con);  
    }
    ?>

并在我的应用的viewDidLoad中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    Store* myStore = [Store sharedStore];
    NSString *companyID = [[NSString alloc] initWithString: myStore.companyID];

    NSURL *strUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.imagine-app.nl/getOrders.php?company=%@", companyID]];
    NSLog(@"connection: %@", strUrl);
    NSData *jsonData = [NSData dataWithContentsOfURL:strUrl];
    NSLog(@"%@", jsonData);
    NSMutableArray *ordersFromDataBbase = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:NULL][@"ordersFromDatabase"];
    NSLog(@"Products Array: %@", ordersFromDataBbase);

}

无论我做什么,数组总是为null,我很确定这是否是向mysql发送自定义对象数组的正确方法。

所以我的最后一个问题,是否有人知道一些示例代码,一个教程或者如何从Objective-c发送和检索自定义对象的数组到php和mysql?

提前感谢您,非常感谢

1 个答案:

答案 0 :(得分:1)

只需创建一个REST服务器并在移动客户端和服务器之间发送数据。