【发布时间】:2011-06-11 09:02:25
【问题描述】:
我在我的 PHP Web 应用程序中遇到了一个我无法解决的奇怪错误。 php 脚本从数据库中获取一行,对其进行处理并序列化一个新查询并将该行写回数据库。
我复制了执行此操作的代码:
foreach($a as $key => $value)
{
$a[$key]="'".mysql_real_escape_string($value)."'";
}
$a['lastUpdate']="$when";
//assembling request
$assignments=array();
foreach($a as $key => $value)
{
$assignments[]="$key=$value";
}
$q="UPDATE wtfb2_villages SET ".implode(',',$assignments)." WHERE (id=${a['id']})";
logText($q);
logText(mysql_error());
$r=mysql_query($q) or die(__FILE__.':'.__LINE__.':'.mysql_error().':'.$q);
logText(mysql_affected_rows());
logText('Mysql error in query is: '.mysql_error()."\n");
那个 UPDATE 似乎执行了。 mysql_error() 给出一个空字符串。 mysql_affected_rows 说 1 就像一切都完成时一样。但如果我使用 phpmyadmin 查看表格,我发现没有任何变化。
我记录了查询本身:
UPDATE wtfb2_villages SET id='22',ownerId='56',villageName='Új falu',x='0',y='1',buildPoints='7.2226273148149',barracksLevel='0',archeryRangeLevel='0',stablesLevel='0',workshopLevel='0',townHallLevel='0',blacksmithLevel='0',goldmineLevel='1',wallLevel='0',spearmen='0',archers='0',knights='0',catapults='0',diplomats='0',spearmanLevel='0',archerLevel='0',knightLevel='0',catapultLevel='0',spearmenTraining='0',archersTraining='0',knightsTraining='0',catapultsTraining='0',diplomatsTraining='0',lastUpdate='2011-01-18 21:56:10' WHERE (id='22')
如果我只是将此查询直接复制粘贴到 phpmyadmin 中,它会执行它,我会在表中看到结果。
该表正在使用 myIsam 引擎。所以没有交易或类似的东西。
我在这个问题上卡住了 2 个多小时,我无法找出发生了什么。
这是唯一一个这样做的查询。正确执行此之前和之后的查询。
有什么想法吗?
【问题讨论】:
-
您是否尝试过只更新单个列而不是一次更新所有列?
-
您是否 1000% 确定您正在查看同一台服务器上的同一张表?它发生在我们所有人身上......