Php 如何将xml数据复制到两个不同表中的mysql

Php 如何将xml数据复制到两个不同表中的mysql,php,mysql,xml,pdo,Php,Mysql,Xml,Pdo,我有xml值类别和子类别,我想将其插入数据库中。这段代码每天都会在服务器上运行,检查xml文件是否有更改,如果有更改,它将更新mysql数据库 可能的话,我想让两个表相互连接。例如,我有几个子类别和一个类别,我想让一个表和类别,第二个表和子类别和第一个表的id数量 第一类 子类别1 第一类 子类别2 第2类 子类别3 因此,首先在子类别表中插入子类别值。只是查询: INSERT INTO subcat (sub_category) VALUES (:subCat) INSERT INTO

我有xml值类别和子类别,我想将其插入数据库中。这段代码每天都会在服务器上运行,检查xml文件是否有更改,如果有更改,它将更新mysql数据库

可能的话,我想让两个表相互连接。例如,我有几个子类别和一个类别,我想让一个表和类别,第二个表和子类别和第一个表的id数量


第一类
子类别1
第一类
子类别2
第2类
子类别3

因此,首先在子类别表中插入子类别值。只是查询:

INSERT INTO subcat (sub_category) VALUES (:subCat)
INSERT INTO cat (category, sub_category) 
VALUES (:cat, 
        (SELECT idsubcat FROM subcat WHERE sub_category = :subCat)
       )
这假设子类别表是用idsubcat定义的,idsubcat是一个自动递增的整数,以确保每个子类别都有一个唯一的id号

如果该插入操作已完成,则将其插入到类别表中。同样,只需查询:

INSERT INTO subcat (sub_category) VALUES (:subCat)
INSERT INTO cat (category, sub_category) 
VALUES (:cat, 
        (SELECT idsubcat FROM subcat WHERE sub_category = :subCat)
       )
  • 因此,第二次插入链接了您刚刚创建的子类别
  • 这里的首选解决方案是设置事务。要么两个查询都运行,要么都失败(并回滚)。这可以防止完整性问题
  • cat表还应将sub_类别定义为subcat表的外键,以确保只插入有效值

因此,首先在子类别表中插入子类别值。只是查询:

INSERT INTO subcat (sub_category) VALUES (:subCat)
INSERT INTO cat (category, sub_category) 
VALUES (:cat, 
        (SELECT idsubcat FROM subcat WHERE sub_category = :subCat)
       )
这假设子类别表是用idsubcat定义的,idsubcat是一个自动递增的整数,以确保每个子类别都有一个唯一的id号

如果该插入操作已完成,则将其插入到类别表中。同样,只需查询:

INSERT INTO subcat (sub_category) VALUES (:subCat)
INSERT INTO cat (category, sub_category) 
VALUES (:cat, 
        (SELECT idsubcat FROM subcat WHERE sub_category = :subCat)
       )
  • 因此,第二次插入链接了您刚刚创建的子类别
  • 这里的首选解决方案是设置事务。要么两个查询都运行,要么都失败(并回滚)。这可以防止完整性问题
  • cat表还应将sub_类别定义为subcat表的外键,以确保只插入有效值
考虑使用PDO,假设第一个表中的ID是自动递增字段

foreach ($xml -> m as $row){
    $cat = $row->category;
    $subCat = $row->sub_category;

    // TABLE 1 INSERT
    $sql = $con->prepare("INSERT INTO table1 (category) VALUES (:cat)");
    $sql->bindValue('cat', $cat);
    $sql->execute();

    $catID = $con->lastInsertId();

    // TABLE 2 INSERT
    $sql = $con->prepare("INSERT INTO table2 (category, sub_category) VALUES (:cat_id, :subCat)");
    $sql->bindValue('cat_id', $catID);
    $sql->bindValue('subCat', $subCat);
    $sql->execute();

}
考虑使用PDO,假设第一个表中的ID是一个自动递增字段

foreach ($xml -> m as $row){
    $cat = $row->category;
    $subCat = $row->sub_category;

    // TABLE 1 INSERT
    $sql = $con->prepare("INSERT INTO table1 (category) VALUES (:cat)");
    $sql->bindValue('cat', $cat);
    $sql->execute();

    $catID = $con->lastInsertId();

    // TABLE 2 INSERT
    $sql = $con->prepare("INSERT INTO table2 (category, sub_category) VALUES (:cat_id, :subCat)");
    $sql->bindValue('cat_id', $catID);
    $sql->bindValue('subCat', $subCat);
    $sql->execute();

}

所以有什么问题?代码在哪里不起作用?你说了你想要什么和一些代码。这段代码将xml中的数据插入到一个表中。我需要分离类别表和子类别表,但将类别id链接到子类别表CATEGORYso?有什么问题?代码在哪里不起作用?你说了你想要什么和一些代码。这段代码将xml中的数据插入到一个表中。我需要分离类别表和子类别表,但将类别id链接到子类别表类别