2017-10-26 8 views
0

curlのXML結果をデータベースに挿入しようとしていますが、データがデータベースに入力されないという問題に直面しています。私はmysqliメソッドとPDOの両方を試しましたが、データはデータベースに入りません。誰もがthis.Hereの私のコードで私を助けることができる: -curlからデータベースへのXML結果の挿入

mysqliの

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url."?".$queryString); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$parameters); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); 
// Save response to the variable $data 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$data = curl_exec($ch); 
// Close Curl connection 
if ($data === False) { 
    echo "cURL ERROR:".curl_error($ch); 
} 
curl_close($ch); 
echo $url."?".$queryString; 
echo '<pre>'; 
echo htmlspecialchars(print_r($data, true)); 
echo '</pre>'; 
$xml= simplexml_load_string($data); 
//print_r($xml) ; 
con = mysqli_connect("localhost","root",""); 
mysqli_select_db($con,"test") or die(mysqli_connect_error()); 
foreach($xml -> Products as $product) { 
    $product->Product; 
    { 
     $name = mysqli_real_escape_string($product->name); 
     $short_description = mysqli_real_escape_string($product- 
          >short_description); 
     $brand = mysqli_real_escape_string($product->brand); 
     $model = mysqli_real_escape_string($product->model); 
     $warranty_type =mysqli_real_escape_string($product->warranty_type); 

     $sql = "Insert into test (name, short_description, 
        brand,model,warranty_type) " . "Values 
     ('$name','$short_description','$brand','$model','$warranty_type')"; 
      $result = mysqli_query($con, $sql); 
      error_log($sql); 
      if (!$result) { 
      echo 'Error:' . mysqli_error($con); 
      } else { 
      echo 'Success'; 
     } 
    } 
} 

**PDO** 
$db= new PDO('mysql:host=localhost;dbname=test','root',''); 
$xmldoc= new DOMDocument(); 
$xmldoc -> load($data); 

$xmldata = $xmldoc ->getElementsByTagName('Product'); 
$xmlcount = $xmldata ->length; 

for($i=0; $i< $xmlcount; $i++){ 
$name = $xmldata -> item($i) ->getElementsByTagName('name')->item(0)-> 
childNodes->item(0)->nodeValue->item(0); 
$short_description = $xmldata -> item($i) - 
>getElementsByTagName('short_description')->item(0)-> childNodes->item(0)- 
>nodeValue->item(0); 
$brand = $xmldata -> item($i) ->getElementsByTagName('brand')->item(0)-> 
childNodes->item(0)->nodeValue->item(0); 
$model = $xmldata -> item($i) ->getElementsByTagName('model')->item(0)-> 
childNodes->item(0)->nodeValue->item(0); 
$warranty_type = $xmldata -> item($i) - 
>getElementsByTagName('warranty_type')->item(0)-> childNodes->item(0)- 
>nodeValue->item(0); 
$stmt = $db->prepare("insert into test values(?,?,?,?,?)"); 
$stmt -> bindParam(1,$name); 
$stmt -> bindParam(2,$short_description); 
$stmt -> bindParam(3,$brand); 
$stmt -> bindParam(4,$model); 
$stmt -> bindParam(5,$warranty_type); 
$stmt ->execute(); 

} 

PDOメソッドgetElementsByTagNameのはDOMNodeをしていないことを示しています。私は私のIDEとしてPHPStorm 2016.2.1を使用しています。


これは私がXML形式でカールから取得応答

<SuccessResponse> 
    <Head> 
    <RequestId>0a1530d415089888818591159e</RequestId> 
    <RequestAction>GetProducts</RequestAction> 
    <ResponseType>Product</ResponseType> 
    <Timestamp>2017-10-26T03:34:40+0000</Timestamp> 
    <isES>true</isES> 
</Head> 
<Body> 
    <TotalProducts>589</TotalProducts> 
    <Products> 
    <Product> 
    <PrimaryCategory>10001164</PrimaryCategory> 
    <SPUId/> 
    <Attributes> 
     <name>Big Rabbit Furry Key Chain (Light Blue)</name> 
     <short_description>&lt;ul&gt; &lt;li&gt;&lt;span style="font- 
    family:arial,sans-serif; font-size:10pt"&gt;A perfect gift for yourself 
    or someone special&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="font- 
family:arial,sans-serif; font-size:10pt"&gt;Good accessory for handbag, 
tote backpack cellphones, keychain or car&lt;/span&gt;&lt;/li&gt; 
&lt;li&gt;&lt;span style="color:rgb(17, 17, 17); font-family:arial,sans- 
serif; font-size:10pt"&gt;Super cute and soft&lt;/span&gt;&lt;/li&gt; 
&lt;li&gt;&lt;span style="color:rgb(17, 17, 17); font-family:arial,sans- 
serif; font-size:10pt"&gt;Ideal companion of your keys, bags, cellphones 
car or other wonderful objects&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span 
style="color:black; font-family:arial,sans-serif; font- 
size:10pt"&gt;Size(cm): 10 x 6 x 18&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt; 
</short_description> 
     <video/> 
     <services/> 
     <brand>Not Specified</brand> 
     <model>bulu15-lightblue</model> 
     <color_family/> 
     <Hazmat/> 
     <warranty_type>No Warranty</warranty_type> 
     <warranty/> 
     <product_warranty/> 
     <name_ms>Big Rabbit Furry Key Chain (Light Blue)</name_ms> 
     <product_warranty_en/> 
     <description_ms/> 
     <external_url/> 
    </Attributes> 
    <Skus> 
     <Sku> 
     <Status>active</Status> 
     <quantity>100</quantity> 
     <tax_class>default</tax_class> 
     <_compatible_variation_>...</_compatible_variation_> 
     <SellerSku>test112</SellerSku> 
     <ShopSku/> 
     <package_content>&lt;p&gt;1 x Big Rabbit Furry Key Chain (Light Blue)&lt;/p&gt;</package_content> 
     <Url/> 
     <package_width>6.00</package_width> 
     <package_height>18.00</package_height> 
     <special_price>0.0</special_price> 
     <price>0.0</price> 
     <package_length>10.00</package_length> 
     <package_weight>0.10</package_weight> 
     <Available>100</Available> 
     <Images> 
      <Image>https://my-live.slatic.net/original/601531319cd1dca721c70637e96cc403.jpg</Image> 
      <Image>https://my-live.slatic.net/original/7e6ad47bbfa1de474fe36c20b06c35f7.jpg</Image> 
      <Image>https://my-live.slatic.net/original/02bc2102d6864a867c25328724f0c7c7.jpg</Image> 
      <Image/> 
      <Image/> 
      <Image/> 
      <Image/> 
      <Image/> 
     </Images> 
     </Sku> 
    </Skus> 
    </Product> 
+0

あなたは($データ)あなたが戻ってカールから取得しているかを示すことができます –

+0

https://api.sellercenter.lazada.com.my?Action=GetProducts&Format=XML&Timestamp=2017-10-26T03%3A34%3A40 %2B0000&UserID = kuhaanand%40consultenvision.com&Version = 1.0&Signature = f5725c773bd3f5fa3bedaf5277cb90af4af84e2f8671d50661da0a404752e609(これは、$ dataに置かれたcurlから返ってくるレスポンスURLです) –

+0

これはXMLにエラーが発生します - E3:タイムスタンプが期限切れです。あなたの質問にデータの少なくとも一部をコピーしてください。 –

答えて

-1

コードのあなたのPDOのバージョンでいくつかの問題があります。

最初に、$xmldoc -> load($data);,load()を使用している場合は、ファイル名と実際のデータの受け渡しを想定しています。したがってこれをloadXML()に変更してください。

次に、データの要素にアクセスするときは、使用して ->nodeValue->item(0)です。 nodeValueはノードの内容を提供するので、この時点で停止する必要があります。下のコードでは、名前の変更を行ったばかりですが、コードを通じてこれを変更する必要があります。

$xmldoc= new DOMDocument(); 
$xmldoc -> loadXML($data); 

$xmldata = $xmldoc ->getElementsByTagName('Product'); 
$xmlcount = $xmldata ->length; 

for($i=0; $i< $xmlcount; $i++){ 
    $name = $xmldata -> item($i) ->getElementsByTagName('name')->item(0)-> 
     childNodes->item(0)->nodeValue; 

     echo $name; 
} 
+0

これはなぜdownvotedに興味がありますか。私の過ちから学ぶのは楽しいですが、フィードバックがないので、彼らが何であるかはわかりません。 –

+0

ありがとうございます。私は自分のコードに追加しようとしましたが、このエラーが発生しました。致命的なエラー:キャッチされていないエラー:C:\ xampp \ htdocs \ qijang \ new.phpの文字列のメンバ関数item() } 223行目のC:\ xampp \ htdocs \ qijang \ new.phpにスローされました。 –

+0

OK - 223行目を表示できますか?何が原因でエラーが発生しているのかを知ることができません。 –

関連する問題