ML
SQLSTATE[42000]: Syntax error or access violation: 1064 You have
Fechado
Bom dia!
Sou acadêmico de Análise e Desenvolvimento de Sistemas, estou criando um projeto para apresentação na faculdade e estou com a seguinte dificuldade:
Após inserir os dados em um formulário de cadastro de cliente e tentar gravar esses dados no banco (mysql) estou me deparando com o seguinte erro: "SQLSTATE[42000]: Syntax error or access 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 '' at line 1".
Classe criada na pasta model:
Classe criada na pasta control:
E no topo do form aparece: Warning: constant(): Couldn't find constant Cliente::TABLENAME in C:xampphtdocsMisterCheflibadiantidatabaseTRecord.php on line 201".
Dentro desse diretório não existe o arquivo TRecord.php.
Ao testar a conexão com o banco através do botão Database Connections do Adianti Studio é exibida a msg de sucesso da conexão com o banco.
Sou acadêmico de Análise e Desenvolvimento de Sistemas, estou criando um projeto para apresentação na faculdade e estou com a seguinte dificuldade:
Após inserir os dados em um formulário de cadastro de cliente e tentar gravar esses dados no banco (mysql) estou me deparando com o seguinte erro: "SQLSTATE[42000]: Syntax error or access 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 '' at line 1".
Classe criada na pasta model:
- <?php
- class Cliente extends TRecord
- {
- const TABLEENAME = 'tbcliente';
- const PRIMARYKEY = 'id_cliente';
- const IDPOLICY = 'max';
-
- public function __construct(1583 = NULL)
- {
- parent::addAttribute('nome_cliente');
- parent::addAttribute('telefone');
- parent::addAttribute('endereco_cliente');
- parent::addAttribute('ponto_ref');
- parent::addAttribute('data_nasc_cliente');
-
- }
- }
- ?>
Classe criada na pasta control:
- <?php
- class ClienteForm extends TPage
- {
- private $form;
-
- public function __construct()
- {
- parent::__construct();
-
- $this->form = new TQuickForm('form_cliente');
- $this->form->setFormTitle('Cadastro de Clientes');
- $this->form->class = 'tform';
- $this->form->style = 'width: 500px';
-
- 1583_cliente = new TEntry('id_cliente');
- $nome_cliente = new TEntry('nome_cliente');
- $tel_cliente = new TEntry('tel_cliente');
- $ponto_ref = new TEntry('ponto_ref');
- $data_nasc_cliente = new TDate('data_nasc_cliente');
-
- 1583_cliente->setEditable(FALSE);
-
- $this->form->addQuickField('ID Cliente', 1583_cliente, 25);
- $this->form->addQuickField('Nome', $nome_cliente, 200);
- $this->form->addQuickField('Telefone', $tel_cliente, 75);
- $this->form->addQuickField('Referência', $ponto_ref, 100);
- $this->form->addQuickField('Data de Nascimento', $data_nasc_cliente, 50);
-
- $save = new TAction( array($this, 'onSave') );
- $this->form->addQuickAction('Salvar', $save, 'ico_save.png');
-
- parent::add($this->form);
- }
-
-
- public function onSave()
- {
- try
- {
- TTransaction::open('conectabd');
-
- $object = $this->form->getData('Cliente');
-
- $object->store();
-
- $this->form->setData( $object );
-
- new TMessage('info', 'Registro adicionado com sucesso!');
-
- TTransaction::close();
-
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
-
- }
-
- }
-
- }
- ?>
E no topo do form aparece: Warning: constant(): Couldn't find constant Cliente::TABLENAME in C:xampphtdocsMisterCheflibadiantidatabaseTRecord.php on line 201".
Dentro desse diretório não existe o arquivo TRecord.php.
Ao testar a conexão com o banco através do botão Database Connections do Adianti Studio é exibida a msg de sucesso da conexão com o banco.
Dá uma olhada na classe cliente. A constante TABLENAME está declarada de forma errada. Está TABLEENAME (com 2 "Es").
Corrija e tente novamente.
Fiz a correção que você solicitou e ao tentar gravar no banco apareceu essa mensagem: 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'misterchefdb.tbcliente' doesn't exist'.
Mesmo testando a conexão com o banco através do botão Database Connections do adianti studio, é possível que a aplicação esteja rodando sem conseguir conectar no banco?
No banco essa tabela existe com o nome: tbclientes.
Seria possível postar o arquivo de conexão (.ini) e uma imagem do BD (tabela)?
Eu acredito que possa ser conexão ou BD.
Posta pra gente analisar.
Segue o arquivo conectabd.ini
host = 'localhost'
name = 'misterchefdb'
user = 'root'
pass = ''
type = 'mysql'
Quanto a imagem da tabela, não vi onde e como inserir a imagem, segue o comando SQL:
CREATE TABLE `misterchedb`.`tbclientes` ( `id_cliente` INT NOT NULL , `nome_cliente` VARCHAR(100) NOT NULL , `tel_cliente` VARCHAR(20) NOT NULL , `endereco_cliente` VARCHAR(100) NOT NULL , `ponto_ref` VARCHAR(100) NOT NULL , `data_nasc_cliente` DATE NOT NULL , PRIMARY KEY (`id_cliente`(4))) ENGINE = InnoDB;
Vlw.
Segue comando correto:
CREATE TABLE `misterchefdb`.`tbclientes` ( `id_cliente` INT NOT NULL , `nome_cliente` VARCHAR(100) NOT NULL , `tel_cliente` VARCHAR(20) NOT NULL , `endereco_cliente` VARCHAR(100) NOT NULL , `ponto_ref` VARCHAR(100) NOT NULL , `data_nasc_cliente` DATE NOT NULL , PRIMARY KEY (`id_cliente`(4))) ENGINE = InnoDB;
Felipe,
Segui suas orientações, porém o problema persisti.
vlw.
Qual é a mensagem de erro?
'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'misterchefdb.tbcliente' doesn't exist'.
Erro de conexão ou não existe o banco ou tabela ou o nome da mesma está errado no model
Você criou a tabela no plural:
CREATE TABLE `misterchefdb`.`tbclientes`
Mas na hora de usar, indicou o singular:
const TABLEENAME = 'tbcliente';
Não existe problema, a mensagem de erro está correta.
Att,
Pablo,
Boa tarde,
Alteração aplicada, questão resolvida.
Obrigado à todos que dispuseram de tempo para me orientar para correção do meu erro.
Atc,
Marcelo Bandeira