Pergunta

Eu li todas as respostas que eu poderia bem, então antes de postar esta pergunta. Embora semelhante, nenhum abordou meu problema específico (ou eu não os reconheci fazendo isso).

Eu tenho uma classe de tabela que estende o zend_db_table_abstract. No modelo, estou tentando retornar uma única linha usando um método junção () e com base no ID da tabela como este:

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

Quando eu ecoando o objeto SQL, entendo isso:

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

Curiosamente, se eu usar este formato,

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

Minha saída é "onde (e.idevent = 1)". O valor não está fechado em ticks, mas parece funcionar para o MySQL. Quando eu corro a consulta em phpmyadmin, entendo isso:

IdCategory Type DisplayOrder Descrição LocalStartTime Events_idevent
1 Individual 1 5k Run / Walk 2010-02-18 23:59:59 1
2 Equipe 2 Categoria de equipe 5K 2010-02-18 23: 59: 591 1

que é o que eu esperava ver. Mas quando eu corro meu aplicativo em um navegador, entendo essa feiúra:

SQLSTATE [42000]: Sintaxe Erro ou Acesso Violação: 1064 Você tem um erro na sintaxe SQL; Verifique o manual que corresponde à sua versão do MySQL Server para obter a sintaxe certa para usar próximo 'Selecionar c.* A PARTIR DE categories COMO c JUNÇÃO INTERNA events COMO e Em c.events_id 'na linha 1

Eu verifiquei todos os recursos em que consigo pensar. Felizmente, a grandiosidade combinada de So Uber-Experts fará desta minha última parada. : D

Foi útil?

Solução

Confira a segunda parte da instrução ERRO. Provavelmente é sobre uma violação de acesso se o MySQL em outros lugares.

Outras dicas

Por razões desconhecidas para mim, o aplicativo acreditava que minha variável $ pageresult não foi definida. Eu descobri isso depois de adicionar um isset () ao código como este:

        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");
    }

O problema foi embora, o que, é claro, revelou o próximo problema à espreita por trás dele. : D

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top