Странная проблема MySQL / PHP: MySQL запрос не выполняется и нет ошибки

0

Я столкнулся с какой-то странной ошибкой в ​​своем веб-приложении PHP, который я не могу разобраться. Php script извлекает строку из базы данных, обрабатывает ее и сериализует новый запрос и записывает строку в базу данных.

Я скопировал код, который делает это:

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 часов, и я не могу узнать, что происходит.

Это единственный запрос, который делает это. запросы до и после этого выполняются правильно.

Любые идеи?

  • 0
    Вы пытались только ОБНОВИТЬ только один столбец вместо всех их сразу?
  • 3
    Вы уверены на 1000%, что смотрите на одной и той же таблице на одном сервере? Это случилось со всеми нами ....
Теги:
debugging

2 ответа

1
Лучший ответ

Я нашел это... Ошибка была в другом месте...

Когда деревня атакована армией, процессор событий script сначала проверяет, существует ли деревня. Если существует, он также выводит строку. Читает идентификатор владельца из строки и обновляет владельца всех деревень, чтобы определить, сколько добычи можно получить из этой деревни. После этого обработчик событий имитирует битву, вычисляет потери и...... записывает строку со старой датой обновления... pfff Вот оно...

Мой совет: если вы застряли с абсолютно абсурдной ошибкой... Примите душ, пообедайте, кормите собаку или бегайте вокруг квартала и т.д.... Просто перестань думать... После того, перед компьютером вы можете почти сразу найти какую-либо ошибку...

ps: И только тогда, когда все не удается запустить SO-сообщение...

0

Глядя на ваш журнал запросов, ID является первичным ключом? Я не уверен, что вы можете включить его в свой запрос на обновление, если это так. Это было некоторое время, так как я сделал работу с БД, хотя.

  • 0
    Это не должно быть проблемой, если вы не установите его в другой существующий идентификатор, который приведет к ошибке.
  • 0
    Если я копирую и вставляю запрос прямо в phpMyadmin, он выполняется. Я думаю, что мне нужно поспать одну ночь, прежде чем я смогу это исправить. Но мне интересно, что это может быть ... Может быть, ошибка PHP? Кто знает...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню