Php 订购系统-mysql中每个订单(非行)的id号

Php 订购系统-mysql中每个订单(非行)的id号,php,mysql,insert,unique,Php,Mysql,Insert,Unique,好的,我已经完成了98%的代码,但在最后一点上仍有困难。我正在创建一个排序系统,从一个页面获取值,将它们发送到一个php页面,并将它们插入mysql数据库,如下所示: $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Cannot connect to mysql server"); mysql_select_db($dbname) or die("Cannot select database");

好的,我已经完成了98%的代码,但在最后一点上仍有困难。我正在创建一个排序系统,从一个页面获取值,将它们发送到一个php页面,并将它们插入mysql数据库,如下所示:

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Cannot connect to mysql server");
           mysql_select_db($dbname) or die("Cannot select database");

            if (isset($_POST['data']) && is_array($_POST['data'])) {
                foreach ($_POST['data'] as $row => $data) {
                    $result = mysql_query("INSERT INTO orders (id,project_ref,supp_short_code,om_part_no,description,quantity,cost_of_items,cost_total) VALUES('', '".$data['project_ref']."', '".$data['supp_short_code']."', '".$data['om_part_no']."', '".$data['description']."', '".$data['quantity_input']."', '".$data['cost_of_items']."', '".$data['cost_total_td']."') ") or die(mysql_error());
                }
            }

这很好(我知道我没有防止sql注入等),但使用上述代码可能会有多行插入到db中,但我需要的是用户以后能够基于一个id号撤回订单。那么,我如何在这个插入查询中插入一个id号,使其匹配所有行,并且在数据库中绝对是唯一的,并且最好是自动递增的(我知道考虑到有多行,这将是一个棘手的问题!)

将一列添加到名为
BatchID
表中。然后,在PHP中生成GUID,并相应地修改
INSERT
语句

有关生成GUID的详细信息

function GUID()
{
    if (function_exists('com_create_guid') === true)
    {
        return trim(com_create_guid(), '{}');
    }

    return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}

在名为
BatchID
orders
表中添加一列。然后,在PHP中生成GUID,并相应地修改
INSERT
语句

有关生成GUID的详细信息

function GUID()
{
    if (function_exists('com_create_guid') === true)
    {
        return trim(com_create_guid(), '{}');
    }

    return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}

假设“id”字段用于保存每个订单的自动递增id,则需要在当前insert语句之前添加一个新insert,该insert语句将只向具有自动递增主键的表中添加一条记录。然后获取这个新的主键,并将其与当前表相关联,而不是与当前的“id”或当前的“id”字段相关联

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Cannot connect to mysql server");
       mysql_select_db($dbname) or die("Cannot select database");

        if (isset($_POST['data']) && is_array($_POST['data'])) {
            result = mysql_query("INSERT INTO orders_to_order SET order_primary = NULL");
            $orderId = mysql_insert_id();
            foreach ($_POST['data'] as $row => $data) {
                $result = mysql_query("INSERT INTO orders (id,project_ref,supp_short_code,om_part_no,description,quantity,cost_of_items,cost_total) VALUES(".$orderId.", '".$data['project_ref']."', '".$data['supp_short_code']."', '".$data['om_part_no']."', '".$data['description']."', '".$data['quantity_input']."', '".$data['cost_of_items']."', '".$data['cost_total_td']."') ") or die(mysql_error());
            }
        }

假设“id”字段用于保存每个订单的自动递增id,则需要在当前insert语句之前添加一个新insert,该insert语句将只向具有自动递增主键的表中添加一条记录。然后获取这个新的主键,并将其与当前表相关联,而不是与当前的“id”或当前的“id”字段相关联

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Cannot connect to mysql server");
       mysql_select_db($dbname) or die("Cannot select database");

        if (isset($_POST['data']) && is_array($_POST['data'])) {
            result = mysql_query("INSERT INTO orders_to_order SET order_primary = NULL");
            $orderId = mysql_insert_id();
            foreach ($_POST['data'] as $row => $data) {
                $result = mysql_query("INSERT INTO orders (id,project_ref,supp_short_code,om_part_no,description,quantity,cost_of_items,cost_total) VALUES(".$orderId.", '".$data['project_ref']."', '".$data['supp_short_code']."', '".$data['om_part_no']."', '".$data['description']."', '".$data['quantity_input']."', '".$data['cost_of_items']."', '".$data['cost_total_td']."') ") or die(mysql_error());
            }
        }

在这种情况下,我要做的是有两个表,
orders
order\u detail

订单
表将包含您的
总计
订单日期
客户id

order\u detail
表中每个项目都有一个条目<代码>零件号
数量
成本
扩展成本
,但会通过
订单id
链接回
订单

您最终会选择以下选项:


SELECT*FROM orders JOIN orders\u detail ON orders.order\u id=order\u detail.order\u id WHERE orders.order\u id='1'
在这种情况下,我要做的是有两个表,
orders
order\u detail

订单
表将包含您的
总计
订单日期
客户id

order\u detail
表中每个项目都有一个条目<代码>零件号,
数量
成本
扩展成本
,但会通过
订单id
链接回
订单

您最终会选择以下选项:

SELECT*FROM orders JOIN order\u detail ON orders.order\u id=order\u detail.order\u id其中orders.order\u id='1'