У меня есть следующий код:
$dateCounter=1;
foreach($teamsA as $teamHome){
foreach($teamsACopy as $teamAway){
if($teamHome!=$teamAway){
$tactic1 = $doctrine->getRepository('LoginLoginBundle:Tactics')
->findByteamTeamid($teamHome->getTeamid());
$tactic2 = $doctrine->getRepository('LoginLoginBundle:Tactics')
->findByteamTeamid($teamAway->getTeamid());
$match = new Match();
$match->setAwayteam($teamAway->getName());
$match->setHometeam($teamHome->getName());
$match->setIsplayed(false);
$match->setSeasonSeasonid($season);
$date = new DateTime(date('Y-m-d H:i:s'));
$date->add(new DateInterval('P'.$dateCounter.'D'));
$match->setDate($date);
$dateCounter++;
$tacticMatchHome = new Tactics();
$tacticMatchHome = $tactic1[0];
$tacticMatchHome->setMatchMatchid($match);
$tacticMatchAway = new Tactics();
$tacticMatchAway = $tactic2[0];
$tacticMatchAway->setMatchMatchid($match);
$em->persist($match);
$em->flush();
$em->persist($tacticMatchHome);
$em->flush();
$em->persist($tacticMatchAway);
$em->flush();
}
}
}
И я получаю следующую ошибку, когда он пытается сохранить его в базе данных:
[Doctrine\DBAL\DBALException]
An exception occurred while executing 'INSERT INTO match (date, homeTeam, awayTeam, winner, isPlayed, score, season_seasonid) VALUES (?, ?, ?, ?, ?, ?, ?)' with params ["2014-11-16 13:50:24", "FC Beer", "Soccerteam11", null, 0, null, 9]:
SQLSTATE[42000]: Syntax error or acces violation: 1064 You have an error in your SQL syntax: check the manual that corresponds to your MySQL server version for the right syntax to use near 'match (date, homeTeam, awayTeam, winner, isPlayed, score, season_seasonid) VALUE' at line1
Возможно ли, что я получаю эту ошибку, потому что моя дата не в правильном формате? Если так, как я могу преобразовать это в надлежащий формат?
Я использую Symfony2 и PHP версии 5.4
Измените совпадение имени таблицы на другое — это зарезервированное слово.
Не создавайте новый объект только для завершения кода.
замещать $tacticMatchHome = new Tactics();
с /** @var $tacticMatchHome Tactics */
,
И используйте findOneBy вместо findBy;)
И, наконец, вы можете очистить один раз в конце кода.
match
является зарезервированным ключевым словом MySQL. Если вы собираетесь назвать таблицу «матч» вы должен оберните это в клещи:
'INSERT INTO `match` (date, homeTeam, awayTeam, winner, isPlayed, score, season_seasonid) VALUES (?, ?, ?, ?, ?, ?, ?)'