以下代码是在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);
答案 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);
}
当然,请考虑使用您的查询转到预备语句。