0

Web上のXMLファイルからデータベースにデータを取得して使用できるようにしようとしています。

私は次のコードを作成しましたが、コーディングを行ってから長い時間が経過したため、表示されるエラーメッセージに夢中になりました。

エラーは「「フィールドリスト」の不明な列「10074」」です。

10074は、XMLファイルの最初のアイテムのプロデュースIDです。

それが私の頭をしているので、どんなポインタも本当に役に立ちます!

私が持っているコードは次のとおりです。

    <?php
   $Products = simplexml_load_file('http://atsdistribution.co.uk/feeds/xml_all_products.aspx');


$con = mysql_connect(Details);
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("catflaps_products", $con);


foreach($Products->Product as $Product)
{
$ProductID = $Product->ProductID;
$Name = $Product->Name;
$DropshipPrice = $Product->DropshipPrice;
$SRP = $Product->SRP;
$Brand = $Product->Brand;
$Xline = $Product->Xline;
$InStock = $Product->InStock;
$Stock = $Product->Stock;
$Barcode = $Product->Barcode;
$Weight = $Product->Weight;
$CategoryID = $Product->CategoryID;
$Category = $Product->Category;
$SmallImage = $Product->SmallImage;
$LargeImage = $Product->LargeImage;
$Description = $Product->Description;

mysql_query("INSERT INTO test(ProductID, Name, DropshipPrice, SRP, Brand, Xline, InStock, Stock, Barcode, Weight, CategoryID, Category, SmallImage, LargeImage, Description)
VALUES(`$ProductID`, `$Name` , `$DropshipPrice`, `$SRP`, `$Brand`, `$Xline`, `$InStock`, `$Stock`, `$Barcode`, `$Weight`, `$CategoryID`, `$Category`, `$SmallImage`, `$LargeImage`, `$Description`)")
        or die(mysql_error());

}

mysql_close($con);


?>
4

1 に答える 1

0
  1. VALUES部分内でバッククォートを使用しないでください。mysql識別子(テーブル、列名など)を引用するだけです。あなたがそれを取り除くならばあなたの問題は解決されると思います
  2. VALUES部分で文字列値を引用するときは、引用符(通常は'または "のいずれか)を使用する必要があります(ただし、以下を参照してください。より良いアプローチがあります)
  3. #2を選択した場合は、ケースでmysql_real_escape_stringを使用して、XMLから値を適切にエスケープする必要があります。実際、これを行わないと、これはセキュリティ違反になります(SQLインジェクションを参照)。ただし、これが一時的なスクリプトの1回限りの使用などであると言っても、xmlデータに一重引用符または二重引用符が含まれていると、別のエラーが発生する可能性があります。
  4. 最善のアプローチは、PDOプリペアドステートメントを使用することです。そうすれば、特定のデータ型を引用符で引用したり、これを行わなかったりする必要はありません。特定のパラメーターをそのデータ型にバインドします。また、mysql_*関数は現在非推奨になっていることを忘れないでください。

したがって、このコードは魅力のように機能します。

<?php
$Products = simplexml_load_file('xml_all_products.xml');
$config = array('db' => array(
    'dbname' => 'test',
    'host'   => 'localhost:4040',
    'username' => 'xx',
    'password' => 'xxx'
));
$db = new PDO('mysql:dbname='.$config['db']['dbname'].';host='.$config['db']['host'],$config['db']['username'],$config['db']['password']);

foreach($Products->Product as $Product)
{
    $ProductID = $Product->ProductID;
    $Name = $Product->Name;
    $DropshipPrice = $Product->DropshipPrice;
    $SRP = $Product->SRP;
    $Brand = $Product->Brand;
    $Xline = $Product->Xline;
    $InStock = $Product->InStock;
    $Stock = $Product->Stock;
    $Barcode = $Product->Barcode;
    $Weight = $Product->Weight;
    $CategoryID = $Product->CategoryID;
    $Category = $Product->Category;
    $SmallImage = $Product->SmallImage;
    $LargeImage = $Product->LargeImage;
    $Description = $Product->Description;

    $ProductsRS = $db->prepare("INSERT INTO test(ProductID, Name, DropshipPrice, SRP, Brand, Xline, InStock, Stock, Barcode, Weight, CategoryID, Category, SmallImage, LargeImage, Description)
                        VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

    $ProductsRS->execute(array($ProductID, $Name, $DropshipPrice, $SRP, $Brand, $Xline, $InStock, $Stock, $Barcode, $Weight, $CategoryID, $Category, $SmallImage, $LargeImage, $Description));
}
于 2013-03-24T17:15:38.420 に答える