下面的代码是使用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]')";
这样,您可以循环访问每个值。否则,将仅返回第一个匹配标记的值。这就是你的情况下发生的事情。