1

J'ai lu toutes les réponses que je pourrais trouver sur SO avant de poster cette question. Bien que similaires, aucun ne traitait mon problème particulier (ou je ne les reconnaissais pas).MySQL Zend Framework - SQLSTATE [42000]: Erreur de syntaxe ou violation d'accès: 1064

J'ai une classe de table qui étend Zend_Db_Table_Abstract. Dans le modèle, je suis en train de retourner une seule ligne en utilisant une méthode join() et basé sur l'ID de table comme ceci:

 $getCategoryResults = $this->select(); 
     $getCategoryResults->setIntegrityCheck(false) 
          ->from(array('c'=> 'categories', '*')) 
          ->join(array('e' => 'events'),'c.events_idEvent = e.idEvent', array()) 
          ->where("e.idEvent = ?", $idEvent); 

quand je fais écho l'objet sql, je reçois ceci:

SELECT `c`.* FROM `categories` AS `c` 
INNER JOIN `events` AS `e` ON c.events_idEvent = e.idEvent 
WHERE (e.idEvent = '1') 

Bizarrement, si j'utilise ce format,

->where("e.idEvent = $idEvent"); 

ma sortie est "Où (e.idEvent = 1)". La valeur n'est pas incluse dans les ticks, mais semble fonctionner pour MySQL. Quand je lance la requête dans phpMyAdmin, je reçois ceci:

type idCategory description displayorder localStartTime events_idEvent
1 personne 1 5k course/marche 2010-02-18 23:59:59 1
2 équipe 2 5k équipe Catégorie 2010-02-18 23: 59: 591 1

ce qui est ce que je m'attendais à voir. Mais quand je lance mon application dans un navigateur, je reçois cette laideur:

SQLSTATE [42000]: Syntaxe violation d'erreur ou d'accès: 1064 Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'SELECT c. * FROM categories AS c INNER JOIN events AS e SUR c.events_id' à la ligne 1

J'ai vérifié tous les ressource que je peux penser. Heureusement, l'awesomeness combinée des experts SOuber fera de mon dernier arrêt. : D

Répondre

1

Extrayez la deuxième partie de l'instruction d'erreur. Très probablement, il s'agit d'une violation d'accès si le mysql ailleurs.

1

Pour des raisons que je ne connaissais pas, l'application croyait que ma variable $ pageResult n'était pas définie. J'ai découvert cela après l'ajout d'un isset() au code comme ceci:

 try { 
     $getCategoryResults = $this->select(); 
     $getCategoryResults->setIntegrityCheck(false) 
          ->from(array('c'=> 'categories', '*')) 
          ->join(array('e' => 'events'),'c.events_idEvent = e.idEvent', array()) 
          ->where("e.idEvent = ?", $idEvent); 

      if (isset($pageResult)) { 
      $pageResult .= $getCategoryResults; 
      } 
      else { 
      $pageResult = $getCategoryResults; 
      } 

    } catch (Exception $e) { 
     echo ("Could not find matching categories for event id = $idEvent"); 
    } 

problème a disparu qui, bien sûr, a révélé le problème suivant qui se cache derrière. : D

+2

Vous n'avez pas mentionné la variable pageresult dans votre question initiale. Je suis content que cela ait fonctionné pour vous, parce que j'ai passé 15 bonnes minutes à essayer de voir pourquoi vous avez eu l'erreur, et je n'ai rien vu d'anormal. Habituellement, je manque des choses comme ça quand je suis fatigué. Peut-être qu'il est temps de se reposer? :) – rvdavid

Questions connexes