2017-05-26 56 views
0

以下代碼是在PHP中使用XML將'cname'字段插入到'tbl_country'中。我想分別添加'USA'和'UK',而代碼則是兩次插入'USA'。 'cid'是'tbl_country'中的主鍵auto_increment字段。XML代碼在數據庫中插入相同的cname兩次,而不是插入'USA'和'UK'

<?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

遞增'$ i'不會影響xml值。 –

回答

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

當然,考慮遷移到準備好的發言與查詢。

+0

運行良好。謝謝 –

1

您需要通過指數以及:

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

這樣一來,就可以通過每一個迭代值。否則,只會返回第一個匹配標籤的值。你的情況發生了什麼。