XML代码在数据库中插入两次相同的cname,而不是插入' USA'和'英国'

时间:2017-05-26 06:44:40

标签: php xml

以下代码是在PHP中使用XML来插入' cname'进入' tbl_country'。我想添加' USA'和'英国'但是,代码分别插入了美国'两次而不是。 ' CID'是< tbl_country'中的主键auto_increment字段。

<?php
    $xmlData =<<< END
    <?xml version="1.0"?>
    <Country>
      <cname>USA</cname>
      <cname>UK</cname>
    </Country>
    END;


    //xml code for database connection        
    $xml = simplexml_load_string($xmlData) or die("ERROR: Cannot create SimpleXML object");
    $con = mysqli_connect("localhost", "root", "admin", "regdb") or die ("ERROR: Cannot connect");

    /* Assumes that the number of IDs = number of countries */
    $size = sizeOf($xml->cname);
    $i = 0; //index

    /* Add each country to the database
    while($i != $size) 
    {
        //echo $xml->id[$i]; //Test
        $sql = "INSERT INTO tbl_country(cname) VALUES('$xml->cname')";
        $con->query($sql);
        $i++; //increment index
    }

    mysqli_close($con);

2 个答案:

答案 0 :(得分:1)

您还需要传递索引:

$cnames = $xml->cname;
$sql = "INSERT INTO tbl_country(cname) VALUES('$cnames[$i]')";

通过这种方式,您可以遍历每个值。否则,将仅返回第一个匹配标记的值。在你的情况下发生了什么。

答案 1 :(得分:1)

而是使用for和其他一些变量($i$size) - 使用foreach

/* Assumes that the number of IDs = number of countries */
//$size = sizeOf($xml->cname);
//$i = 0; //index

/* Add each country to the database */
foreach ($xml->cname as $item) {
    $sql = "INSERT INTO tbl_country(cname) VALUES('$item')";
    $con->query($sql);
}

当然,请考虑使用您的查询转到预备语句