Странная проблема MySQL / PHP: MySQL запрос не выполняется и нет ошибки - PullRequest
0 голосов
/ 19 января 2011

Я столкнулся со странной ошибкой в ​​моем веб-приложении на PHP, которую я не могу устранить.Сценарий 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");

Это обновление, похоже, выполняется.mysql_error () выдает пустую строку.mysql_acted_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 часа, и я не могу выяснить, что происходит.

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 19 января 2011

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

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

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

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

0 голосов
/ 19 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...