使用PHP更新MySql中的多个行

时间:2013-01-16 15:51:31

标签: php mysql xml sql-update

我有这个脚本读取解析的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);

?>

显然,我在数据库中有一个表(my_table),其中包含所有列(gameId,gameName,amount和currency)。

我需要更新每个“gameId”列的“金额”列。 当我运行下面的脚本时,我得到了更新,但所有“金额”都相同。 我能得到一些支持吗? 我的错误在哪里?

提前致谢!

2 个答案:

答案 0 :(得分:4)

您必须在查询中包含gameId!

像这样:

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

但是,当你将变量硬编码插入到查询中时要小心。 您应该在之前转义变量以避免SQL注入漏洞。 研究像Code Igniter,Zend或Laravel这样的PHP框架可能会让你在这些任务中获得一些基本功能。

答案 1 :(得分:3)

你需要一个where语句来定位一个特定的行,你的语句每次都会在循环中更新整个表,这就是为什么你获得相同的金额,即循环中的最后一个金额

  

mysql_query(“UPDATE my_table SET amount = $ jackpot-&gt; amount WHERE gameId = $ jackpot-&gt; gameId);