2017-03-10 8 views
2

foreachステートメントでMYSQL DBにxmlファイルをロードしようとしています。それは何らかの理由でXMLファイルをうまくループしていますが、ループを初めて初めて実際にDBに送信されるようです。MYSQL PHP foreachステートメントは、最初に文を挿入します

<?xml version="1.0" encoding="utf-8" ?> 

<chatcoderadmin> 
    <!-- Table Alarcos --> 
    <Alarcos> 
     <Alarcos_ID>12</Alarcos_ID> 
     <Device_ID>16cf10d0-5154-444e-96ad-46e913ac9761</Device_ID> 
     <Sender>4849941474</Sender> 
     <Receiver>2157389113</Receiver> 
     <Message>Hi Connor</Message> 
     <Service_Center></Service_Center> 
     <SMSStatus>0</SMSStatus> 
     <Timestamp>2015-09-10 14:09:45</Timestamp> 
     <Replace_Bit_Set>0</Replace_Bit_Set> 
     <Reply_Path_Exists>0</Reply_Path_Exists> 
     <Is_Status_Report>0</Is_Status_Report> 
    </Alarcos> 
    <Alarcos> 
     <Alarcos_ID>13</Alarcos_ID> 
     <Device_ID>f0bd524e-2289-47b3-b9c6-65c6af2dce64</Device_ID> 
     <Sender>4849941470</Sender> 
     <Receiver>266781</Receiver> 
     <Message>BstFreeMsg: Select privacy choices for new account or line(s). More info on how to opt in/out of Mobile Ads &amp; Reporting programs at boostmobile.com/privacy. </Message> 
     <Service_Center></Service_Center> 
     <SMSStatus>0</SMSStatus> 
     <Timestamp>2015-09-10 11:30:01</Timestamp> 
     <Replace_Bit_Set>0</Replace_Bit_Set> 
     <Reply_Path_Exists>0</Reply_Path_Exists> 
     <Is_Status_Report>0</Is_Status_Report> 
    </Alarcos> 
</chatcoderadmin> 

これは、私はあなたが両方のXML要素で同じIDを持っているXML

<?php 
    $xml = simplexml_load_file("test.xml") or die("Error: Cannot create object"); 

    $createAlarcos = $conn->prepare("INSERT INTO Alarcos_Data (alarcos_id, device_id, sender, receiver, message, alarcos_timestamp) VALUES (?,?,?,?,?,?)"); 

    $createAlarcos->bind_param("isssss",$alarcos_id, $device_id, $sender, $receiver, $message, $alarcos_timestamp); 

    foreach($xml->children() as $Alarcos) { 

     $alarcos_id = $Alarcos->Alarcos_ID; 
     $device_id = $Alarcos->Device_ID; 
     $sender = $Alarcos->Sender; 
     $receiver = $Alarcos->Receiver; 
     $message = $Alarcos->Message; 
     $alarcos_timestamp = $Alarcos->Timestamp; 

     $createAlarcos->execute(); 

    } 

    $createAlarcos->close(); 
    ?> 
+0

これは正常です。私は '$ conn'はmysqliでPDOではないと思いますか?エラーはありますか?実際にXMLから複数の子を処理していることを確認するためにデバッグを追加しましたか? – miken32

+1

$ connはmysqliです。私はそれが複数の子供を処理していると確信しています。 foreachのalarcos_idをエコーアウトすると、その両方のインスタンスが得られます。 – kirie

+0

私はいくつかの状況で存在しない変数への束縛が問題を引き起こすことがあることを発見しました。私は通常、変数をバインドする前に空として宣言します。 – miken32

答えて

0

を処理するために使用しているPHPコードです。おそらくalarcos_idはデータベーステーブルのプライマリキーなので、上書きされません。これはエラーの結果をチェックする良い理由です。​​はおそらくfalseを返しています。

... 
if (!$createAlarcos->execute()) { 
    foreach ($createAlarcos->error_list as $err) { 
     echo "Error $err[errno]: $err[error]<br/>\n"; 
    } 
} 
+0

実行クエリの出力は、私のdbテーブルの私の主キーがauto_incrememtedではないことを知りました。それで、私の挿入物をID「0」で提出しようとし続けました。本当にありがとう。 – kirie

関連する問題