【问题标题】:Strange MySQL/PHP issue: mysql query does not execute and there is no error奇怪的 MySQL/PHP 问题:mysql 查询不执行并且没有错误
【发布时间】: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% 确定您正在查看同一台服务器上的同一张表?它发生在我们所有人身上......

标签: php mysql debugging


【解决方案1】:

我发现了...错误在别处...

当一个村庄被军队攻击时,事件处理器脚本首先检查村庄是否存在。如果存在,它也会获取该行。从行中读取所有者的 id,并更新所有者的所有村庄以确定可以从该村庄获得多少战利品。之后事件处理器模拟战斗,计算伤亡人数并... ...用旧的更新日期写回行... pff 就是这样...

我的建议:如果你被一个完全荒谬的虫子困住了……洗个澡、吃晚饭、喂狗或绕着街区跑一圈等等……别再想了……坐下来之后在电脑前你几乎可以立即发现任何类型的错误......

ps:只有当一切都失败时才开始发帖...

【讨论】:

    【解决方案2】:

    查看您的查询日志,ID 是主键吗?如果是这样,我不确定您是否可以将其包含在更新查询中。不过,我已经有一段时间没有做数据库工作了。

    【讨论】:

    • 这应该不是问题,除非您将其设置为另一个现有 ID,否则会产生错误。
    • 如果我将查询直接复制粘贴到 phpMyadmin 中,它就会执行。我想我必须睡一晚才能修复它。但我很好奇它会是什么......也许是一个php错误?谁知道...
    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多