Ir para conteúdo
Fórum Script Brasil
  • 0

Erro de conexão com MYSQL


dagel

Pergunta

Olá a você que está lendo, com vai? Estou produzindo um formulário simples, apenas duas entradas no mysql, mas não saio deste erro:

Fatal error: Uncaught PDOException: 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 ''walter' VALUES('walter','walterdagel@terra.com.br')' at line 1 in C:\xampp\htdocs\formulario\classes\form.php:17 Stack trace: #0 C:\xampp\htdocs\formulario\classes\form.php(17): PDOStatement->execute(Array) #1 C:\xampp\htdocs\formulario\index.php(30): form::cadastrar('walter', 'walterdagel@ter...') #2 {main} thrown in C:\xampp\htdocs\formulario\classes\form.php on line 17

Agradeço muito a  quem puder tirar um tempinho para me ajudar, estou nisso faz 2 semanas já

Segue código:

INDEX.PHP

 

<?php
 
    include('config.php');
    mysql::conectar();
 
?>
 
<!DOCTYPE htmll>
<html lang="pt-br">
<head>
    <title>Formulário</title>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width-device-width, initial-scale=1.0">
        <link href="form.css" rel="stylesheet">
 
    <div class="form_cd">
 
        <?php
       
            if(isset($_POST['acao']) && $_POST['form'] == 'f_form'){
                $nome = $_POST['nome'];
                $email = $_POST['email'];
 
                if($nome == ''){
                    Form::alert('erro','Insira seu nome');
                }else if($email == ''){
                    Form::alert('erro','Insira seu email');
                }else{
                    Form::cadastrar($nome,$email);
                    Form::alert('sucesso','Usuario' .$nome.'Cadastrado com sucesso!');
                }
            }
        ?>
 
        <h1>De uma forma discreta!</h1>
        <h5>Cadastre-se e para receber o contato de uma consultora</h5>
    <form method="POST">
        <div><input type="text" name="nome" placeholder="Insira seu nome"></div>
        <div><input type="text" name="email" placeholder="Insira seu email"></div>
        <div><input type="submit" name="acao" value="Enviar"></div>
        <div><input type="hidden" name="form" value="f_form"></div> //"f_form" indica prigem do submit
    </form>
    </div>
</body>
</html>
 
 
 
CONFIG.PHP (SERVIDOR) -CONEXÃO TESTADA E OK
 
<?php
 
    $print = function($class){
        if(file_exists('classes/'.$class.'.php')){
            include_once('classes/'.$class.'.php');
        }
    };
 
    spl_autoload_register($print);
 
    define('HOST','');
    define('DATABASE','');
    define('USER',');
    define('PASSWORD',');
 
FORM.PHP
 
 
<?php
 
    class form{
 
        public static function alert($tipo,$mensagem){
            if($tipo == 'erro'){
                echo '<div style="background:black; color:red; font-size:25px;">' .$mensagem.'</div>';
                return false;
            }else if($tipo == 'sucesso'){
                echo '<div style="background:black; color:green; font-size:25px;">' .$mensagem.'</div>';
                return false;
            }
        }
 
        public static function cadastrar($nome,$email){
            $sql = mysql::conectar()-> prepare("INSERT INTO 'walter' VALUES(?,?) ");
            $sql->execute(array($nome,$email));
        }
    }
 
?>
 
MYSQL.PHP
 
 
<?php
 
    class mysql{
 
        private static $pdo;
 
        public static function conectar(){
            if(self::$pdo == null){
                try{
                    self::$pdo = new PDO('mysql:host='.HOST.';dbname='.DATABASE,USER,PASSWORD,array(PDO::
                    MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
                    self::$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
                    }catch(Exception $e){
                        echo '<h2 style="color:red;"> Erro ao conectar com banco de dados <h2>';
                    }
            }
            return self::$pdo;
        }
    }
 
?>
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Em 21/03/2022 em 14:56, lowys disse:

Remova as aspas simples do nome da tabela walter e tente novamente

Bom dia, obrigado! Falta de atenção total.

Se eu puder aproveitar o post, eu fiz essa conexão de database como  teste pois estou tentando conectar com uma database de mais colunas, mas mesmo com o  mesmo código  não consigo. Esse é o erro que aparece:

 

Fatal error: Uncaught PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 in C:\xampp\htdocs\formulario\classes\form.php:17 Stack trace: #0 C:\xampp\htdocs\formulario\classes\form.php(17): PDOStatement->execute(Array) #1 C:\xampp\htdocs\formulario\index.php(34): form::cadastrar('walter', 'walter@ter...', '11', '98965668', '11', '935151646') #2 {main} thrown in C:\xampp\htdocs\formulario\classes\form.php on line 17

 

Não quero usar todas as colunas da database, por isso estou usando "INSERT INTO", assim só será possível conectar com as colunas nomeadas, certo? Na database existem mais 6 colunas, algumas  com type radio, e também a primeira coluna serve só para o AI.

 

 

 <?php
       
            if(isset($_POST['acao']) && $_POST['form'] == 'f_form'){
                $nome = $_POST['nome'];
                $email = $_POST['email'];
                $ddd = $_POST['ddd'];
                $Tel = $_POST['Tel'];
                $dddCel = $_POST['dddCel'];
                $Cel = $_POST['Cel'];
 
                if($nome == ''){
                    Form::alert('erro','Insira seu nome');
                }else if($email == ''){
                    Form::alert('erro','Insira seu email');
                }else{
                    Form::cadastrar($nome,$email,$ddd,$Tel,$dddCel,$Cel);
                    Form::alert('sucesso','Usuario' .$nome.'Cadastrado com sucesso!');
                }
            }
        ?>
 
<form method="POST">
        <div><input type="text" name="nome" placeholder="Insira seu nome"></div>
        <div><input type="text" name="email" placeholder="Insira seu email"></div>
        <div><input type="text" name="ddd" placeholder="DDD"></div>
        <div><input type="text" name="Tel" placeholder="Telefone Fixo"></div>
        <div><input type="text" name="dddCel" placeholder="DDD"></div>
        <div><input type="text" name="Cel" placeholder="Celular"></div>
        <div><input type="submit" name="acao" value="Enviar"></div>
        <div><input type="hidden" name="form" value="f_form"></div> //"f_form" indica prigem do submit
    </form>
 
 
==================================================================================
 
 }
 
        public static function cadastrar($nome,$email,$ddd,$Tel,$dddCel,$Cel){
            $sql = mysql::conectar()-> prepare("INSERT INTO CadastroLead VALUES(?,?,?,?,?,?) ");
            $sql->execute(array($nome,$email,$ddd,$Tel,$dddCel,$Cel));
        }
Link para o comentário
Compartilhar em outros sites

  • 0
4 horas atrás, dagel disse:

$sql = mysql::conectar()-> prepare("INSERT INTO CadastroLead VALUES(?,?,?,?,?,?) ");

Nomeie as colunas, em ordem as quais você pretente fazer a inserção:
... insert into CadastroLead(nome-da-coluna1, nome-da-coluna2, ..., nome-da-coluna6) values (?,?,?,?,?,?)...

Editado por lowys
Link para o comentário
Compartilhar em outros sites

  • 0

Além do erro de sintaxe no comando insert to o arquivo config.php não configura o banco de dados. Há muita coisa que foi definido em PHP que o HTML consegue resolver sozinho, como não aceitar campo em branco ou esquecer do @ no email. Eu não entendo muito de PDO, mas eu fiz um pequeno código que faz a mesma coisa.

astudy.php
----------------------------------------------
<!DOCTYPE htmll>
<html lang="pt-br">
<head>
	<title>Formulário</title>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
	<style>
		fieldset {display: inline-block;position: absolute;
			overflow: visible;  padding: 10;  margin: 10;border: 2px #af3333 solid;
			border-radius: 10px;}
		div {width: 330px;height: 350px;display: inline-block}
		#div1 {}
		#div2 {position:absolute;top:50px;color:red}
	</style>
<body>
<div id=div1>
<form method=post>
  <fieldset>
    <legend>Faça o cadastro e receba nossa consultora</legend>
    <input name=cadastro[] placeholder=Nome required size=35 autofocus><br><br>
    <input name=cadastro[] placeholder=Email required size=35 type=email><br><br>
    <input type="submit">
  </fieldset>
</form>	
</div>
<?php
//MsQL astudy.tbusuario [id(int,pk,nn,ai);nome(varchar(45),uq);email(varchar(45),uq);senha(varchar(45))]
if (isset($_POST['cadastro'])){
	$cadastro=$_POST['cadastro'];
	$nome=$cadastro[0];
	$email=$cadastro[1];
	//não vai ser verificado o cadastro pois o banco de dados não permite duplicidade
	$mysqli=new mysqli("localhost","root","","astudy");
	$query=$mysqli->query("insert into tbusuario (nome,email) values ('$nome','$email')");
	echo "<div id=div2 onclick=location.replace('astudy.php')>$nome cadastrado com sucesso!</div>";}
?>

 

Sem título.png

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...