0

解析された xml (外部) を読み取る次のスクリプトがあります。

<?php
//mysql connection
$con2 = mysql_connect("localhost","username","password");
if (!$con2)
  {
  die('Could not connect: ' . mysql_error());
  }

$selectdb = mysql_select_db("test_db", $con2);
if (!$selectdb)
  {
 die('Database not used: ; ' . mysql_error());
  }

//simplexml load xml file
   $jackpots =  simplexml_load_file('https://www.123.com/xmldata.xml');

//loop through parsed xmlfeed and print output
      foreach ($jackpots->jackpot as $jackpot) {

                     foreach ($jackpots->jackpot as $jackpot) {
                     printf("gameId: %s\n", $jackpot->gameId);
                     printf("gameName: %s\n", $jackpot->gameName);
                     printf("amount: %s\n", $jackpot->amount);
                     printf("currency: %s\n", $jackpot->currency);
//insert into databse
foreach ($jackpots->gameId as $jackpot) {
                               mysql_query("UPDATE my_table SET amount=$jackpot->amount")
                               or die(mysql_error());}
//show updated records
            printf ("Records inserted: %d\n", mysql_affected_rows());
            }
        }
//close connection
 mysql_close($con2);

?>

明らかに、すべての列 (gameId、gameName、amount、および currency) を含むテーブル (my_table) がデータベースにあります。

「gameId」列ごとに「金額」列を更新する必要があります。以下のスクリプトを実行すると、更新が表示されますが、すべての「金額」は同じです。サポートをお願いできますか?私のエラーはどこですか?

前もって感謝します!

4

2 に答える 2

4

クエリに gameId を含める必要があります。

このような:

mysql_query("UPDATE my_table SET amount=$jackpot->amount WHERE gameId = '".$jackpot->gameId."'")

ただし、このようにハードコーディングされた変数をクエリに挿入する場合は注意してください。SQL インジェクションの脆弱性を回避するために、事前に変数をエスケープする必要があります。これらのタスクで基本的な機能を設定するには、Code Igniter、Zend、Laravel などの PHP フレームワークを調べてみるとよいでしょう。

于 2013-01-16T15:53:50.717 に答える
3

特定の行を対象とするステートメントが必要ですwhere。ステートメントはループのたびにテーブル全体を更新します。そのため、ループの最後の金額である同じ金額を取得します

mysql_query("UPDATE my_table SET amount=$jackpot->amount WHERE gameId=$jackpot->gameId);

于 2013-01-16T15:53:19.340 に答える