2014-11-15 1 views
0

:데이터베이스에 유지하려고하면 MySQL 오류가 발생합니다 - Symfony2 - 가능한 날짜 오류가 있습니까? 내가 다음 코드를 한

$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 

내가 내 날짜 ISN '때문에이 오류가 그것이 가능 올바른 형식으로? 그렇다면 어떻게 적절한 형식으로 변환 할 수 있습니까? 내가 Symfony2 및 PHP 버전 5.4

답변

0

변경 테이블 이름 일치를 다른 - 그것은 예약 된 단어입니다. 코드 완성을 위해서만 새 개체를 만들지 마십시오. $tacticMatchHome = new Tactics();/** @var $tacticMatchHome Tactics */으로 바꿉니다. findBy 대신 findOneBy를 사용하십시오.) 마지막으로 코드 끝 부분에서 한 번 플러시 할 수 있습니다.

+0

$ tacticMatchHome을 대체해야하는 이유는 무엇입니까? 그냥 궁금해 할 때 : p –

+0

다음 줄에서는 다른 변수를이 변수에 설정했기 때문입니다. 코드 완성을 위해서만 새로운 객체를 만드는 것은 퍼포먼스 측면과 일반적으로 "클린 코드"측면에서 좋은 습관이 아닙니다 :) –

+0

괜찮 았어, 고마워! –

1

match을 사용하고

은 MySQL이 키워드를 예약되어 있습니다. 당신이 테이블 "일치"이름을 위하여려고하는 경우에 당신은 진드기에 포장해야합니다

'INSERT INTO `match` (date, homeTeam, awayTeam, winner, isPlayed, score, season_seasonid) VALUES (?, ?, ?, ?, ?, ?, ?)' 
+0

Symphony가 쿼리를 작성할 때 (자동으로 그렇게하지는 않는다), 데이터 틱에 이미 백틱을 포함시켜야하거나 'QuoteStrategy'를 사용해야한다. /doctrine-orm.readthedocs.org/en/latest/reference/basic-mapping.html#quoting-reserved-words – CBroe