我有这个脚本读取解析的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”列的“金额”列。 当我运行下面的脚本时,我得到了更新,但所有“金额”都相同。 我能得到一些支持吗? 我的错误在哪里?
提前致谢!
答案 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);