2013-04-15 63 views
0

雖然我插入數據到數據庫使用正常的XML樹結構數據成功插入,但是當我試圖插入數據到數據庫使用不同的XML結構它不給我任何錯誤,但在同時字段創建的,但我不能在表中以可視化的內容,插入數據到MySQL數據庫通過xml

<?xml version="1.0"?> 
<xml> 
<draw> 
<candelete>yes</candelete> 
<forpayroll>no</forpayroll> 
<name>hello</name> 
</draw> 
</xml> 

以上,成功地將數據插入到mysql數據庫中的XML格式

下面的XML格式不是讓我將數據插入到mysql數據庫

<ENVELOPE> 
<HEADER> 
<VERSION>1</VERSION> 
<STATUS>1</STATUS> 
</HEADER> 
<BODY> 
<DESC> 
</DESC> 
<DATA> 
<TALLYMESSAGE> 
<LEDGER NAME="Dena" RESERVEDNAME="" ID="2240" REQNAME="dena"> 
<PARENT TYPE="String">Bank Accounts</PARENT> 
<TAXTYPE TYPE="String">Others</TAXTYPE> 
<ISBILLWISEON TYPE="Logical">No</ISBILLWISEON> 
<ISCOSTCENTRESON TYPE="Logical">No</ISCOSTCENTRESON> 
<ISREVENUE TYPE="Logical">No</ISREVENUE> 
<ISDEEMEDPOSITIVE TYPE="Logical">Yes</ISDEEMEDPOSITIVE> 
<CANDELETE TYPE="Logical">Yes</CANDELETE> 
<FORPAYROLL TYPE="Logical">No</FORPAYROLL> 
<MASTERID TYPE="Number"> 2240</MASTERID> 
<TNETBALANCE TYPE="Amount">0.00</TNETBALANCE> 
<LANGUAGENAME.LIST> 
<NAME.LIST TYPE="String"> 
<NAME>Dena</NAME> 
</NAME.LIST> 
<LANGUAGEID TYPE="Number">0</LANGUAGEID> 
</LANGUAGENAME.LIST> 
</LEDGER> 
</TALLYMESSAGE> 
</DATA> 
</BODY> 
</ENVELOPE> 
下面

是我的PHP插入連接代碼

<?php 

$con = mysql_connect("localhost:3306","root",""); 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("temp", $con); 


if(!$xml=simplexml_load_file('./xml/data.xml')){ 
trigger_error('Error reading XML file',E_USER_ERROR); 
} 



foreach ($xml as $syn) 
{ 
$candelete = $syn->candelete; 
$forpayroll = $syn->forpayroll; 
$name = $syn->name; 

$sql = "INSERT INTO vtiger (candelete, forpayroll, name) VALUES ('$candelete','$forpayroll','$name')"; 
$query = mysql_query($sql); 

if (!$query) 
{ 
    echo ('Error: ' . mysql_error()); 
} 
else 
{ 
    echo "Record added"; 
} 
} 
mysql_close($con); 
?>  
+0

請添加一些你的導入函數的代碼,我們不能幫你沒有代碼 – Fabio

+0

我有我的數據庫連接代碼的上面,只是編輯。 (我想包括2 3個特定的領域,只有這些只拿這些領域的連接) –

回答

0

定義你的連接如到MySQL在$con 還必須使用mysql_query($sql, $con);

+0

在非常第一個XML格式的數據插入所以問題不是關於連接問題是關於XML結構,是否有可能插入數據使用第二個XML結構體? –

1

我想請您看看你foreach循環讀取XML :

foreach ($xml as $syn) 
{ 
    $candelete = $syn->candelete; 
    $forpayroll = $syn->forpayroll; 
    $name = $syn->name; 

正如你在這裏看到的那樣,你的decleare xml節點至少是完全不同的在新的xml中,所以您需要解析文檔並獲取所有相關數據來構建查詢。一個好的方法是在<TALLYMESSAGE>之間循環檢索所有相關數據並存儲到變量中,這些變量將用於新查詢。

您可以使用simplexml_load_file來做到這一點。 文檔:here

注意您查詢還必須用新的XML根據被改變,你需要有正確的模式一個新表。

UPDATED

你仍然可以使用同樣的方法來解析文件,但是你需要改變你的腳本,你將結束與更多的代碼解析整個新的XML。正如你所看到的結構是完全不同的手有許多孩子節點至少不能通過使用一個簡單的foreach檢索,就像你爲沒有任何子節點的第一個文件所做的那樣。這就是爲什麼你真的應該使用simplexml_load_file,更少的工作

+0

我得到你在說什麼,也想着做同樣的事情,但發佈的問題是,如果我可以做我想做的事情,而不做所有那些爲什麼發佈這個問題,還是謝謝你的建議。 –

+0

是的,你可以,但你完全需要改變你的腳本,你會得到更多的代碼行來解析整個新的XML。正如你所看到的,結構是完全不同的,有許多子節點,這些子節點不能像第一個文件那樣使用簡單的foreach檢索。這就是爲什麼你真的應該使用simplexml_load_file,減少工作 – Fabio

+0

是的,我知道了,謝謝你fabio。 –

1

你需要考慮更多關於你的foreach循環,因爲你的工作XML文件thats只有一個數組,所以你可以檢索數據只使用一個foreach循環,但你的另一個XML文件我認爲它包含更多的數組,因此您需要根據其結構創建一個或多個foreach循環。

+0

好吧,我明白了,感謝您的興趣。 –