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



下面的代码是使用PHP中的XML将"cname"字段插入到"tbl_country"中。我想分别添加"美国"和"英国",但是代码插入了两次"美国"。"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);
而是使用

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);
}

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

您还需要传递索引:

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

这样,您可以循环访问每个值。否则,将仅返回第一个匹配标记的值。这就是你的情况下发生的事情。

最新更新