Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PaisNeto

[Resolvido] inserir dados em tabela mysql com pdo

Mensagens Recomendadas

PaisNeto

Boa tarde, eu estou a tentar ligar a uma base de dados usando o pdo, mas não estou a conseguir.

Mas sem utilizar o pdo consigo.

Sem pdo

define('servidor', 'localhost');
define('utilizador', 'user_user');
define('password', 'userpass');
define('basedados', 'extreme');
$conexion = mysql_pconnect(servidor, usuario, clave) or die ("Não foi possível ligar ao servidor");mysql_select_db(basedados, $conexion) or die ("Não foi possível ligar à base de dados");

$v_nome     = 'Nuno';
$v_bi         = '2123321';
$v_localidade = 'local';
$v_tlm     = '9898989';
$v_mota     = 'zundape';
$v_cilindrada = '900';
$v_ciclos     = '4T';
$v_classe     = 'pro';
$v_equipa     = 'masdnasd';
$v_email     = 'aaa@aaa.com';
$sql_dados = "INSERT INTO tabela(nome,bi,localidade,telemovel,moto,ciclindrada,ciclos,classe,equipa,email)
VALUES('$v_nome' ,'$v_bi','$v_localidade','$v_tlm','$v_mota' ,'$v_cilindrada','$v_ciclos','$v_classe','$v_equipa' ,'$v_email')";
$v_insere = mysql_query($sql_dados) or die(mysql_error('Erro de ligação à base de dados3'));

com pdo

$host = 'localhost';
$user = 'user_user';
$pass = 'userpass';
$database = 'extreme';

try {
$conn = new PDO("mysql:host=$host;dbname=$database", $user, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$STH = $DBH->prepare("INSERT INTO subidaimp (nome,bi,localidade,telemovel,moto,ciclindrada,ciclos,classe,equipa,email)
    VALUES (:nome,:bi,:localidade,:telemovel,:moto,:cilindrada,:ciclos,:classe,:equipa,:email)");$STH->bindParam(':nome',     $v_nome);
$STH->bindParam(':bi',         $v_bi);
$STH->bindParam(':localidade', $v_localidade);
$STH->bindParam(':telemovel', $v_tlm);
$STH->bindParam(':moto',     $v_mota);
$STH->bindParam(':cilindrada', $v_cilindrada);
$STH->bindParam(':ciclos',     $v_ciclos);
$STH->bindParam(':classe',     $v_classe);
$STH->bindParam(':equipa',     $v_equipa);
$STH->bindParam(':email',     $v_email);

// insere um novo registro
$v_nome     = 'Nuno';
$v_bi         = '2123321';
$v_localidade = 'local';
$v_tlm     = '2434235';
$v_mota     = 'zundape';
$v_cilindrada = '900';
$v_ciclos     = '4T';
$v_classe     = 'pro';
$v_equipa     = 'masdnasd';
$v_email     = 'aaa@aaa.com';
$inserted = $STH->execute();

será que alguem me pode dizer o que estou a fazer de errado

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PaisNeto

umas das coisas que eu acho que tenho mal

"$STH = $DBH->prepare" , que em vez do $DBH devia ter $con

o erro que me é apresentado é

http 500

Esta página não pode ser apresentada, porque o servidor deste site poderá estar em manutenção ou poderá haver um erro de programação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

umas das coisas que eu acho que tenho mal

"$STH = $DBH->prepare" , que em vez do $DBH devia ter $con

já é um começo ...

o erro que me é apresentado é

http 500

Esta página não pode ser apresentada, porque o servidor deste site poderá estar em manutenção ou poderá haver um erro de programação.

o erro 500 quer dizer que houve erro fatal no processamento do pedido, normalmente por erro de sintaxe do PHP (que até pode estar em código não apresentado) ou por coisas como o apresentado anteriormente (redireccionamento de um objecto que na realidade é nulo)


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PaisNeto

<?php
$host = 'localhost';
$user = 'user_user';
$pass = 'userpass';
$database = 'extreme';

try {
   $conn = new PDO('mysql:host=$host;dbname=$database', $user, $pass);
   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
   echo 'ERROR: ' . $e->getMessage();
}

$STH = $conn->prepare("INSERT INTO tabela (nome,bi,localidade,telemovel,moto,ciclindrada,ciclos,classe,equipa,email)
      VALUES (:nome,:bi,:localidade,:telemovel,:moto,:cilindrada,:ciclos,:classe,:equipa,:email)");
$STH->bindParam(':nome',       $v_nome);
$STH->bindParam(':bi',         $v_bi);
$STH->bindParam(':localidade', $v_localidade);
$STH->bindParam(':telemovel',  $v_tlm);
$STH->bindParam(':moto',       $v_mota);
$STH->bindParam(':cilindrada', $v_cilindrada);
$STH->bindParam(':ciclos',     $v_ciclos);
$STH->bindParam(':classe',     $v_classe);
$STH->bindParam(':equipa',     $v_equipa);
$STH->bindParam(':email',      $v_email);

// insere um novo registro
$v_nome       = 'Nuno';
$v_bi         = '2123321';
$v_localidade = 'local';
$v_tlm        = '918835355';
$v_mota       = 'zundape';
$v_cilindrada = '900';
$v_ciclos     = '4T';
$v_classe     = 'pro';
$v_equipa     = 'masdnasd';
$v_email      = 'aaa@aaa.com';
$inserted = $STH->execute();


//Because PDOStatement::execute returns a TRUE or FALSE value,
//we can easily check to see if our insert was successful.
if($inserted){
   echo 'Row inserted!<br>';
}
else{
echo 'Erro!<br>';
}

//close conection
$this->connection->close();

?>

Este é o código que tem o meu ficheiro, eu estava a fazer uma coisa simples para tentar ver como funcionava o pdo

se eu comentar a parte do insert na tabela, não me é apresentado nenhum erro, pelo que me leva a crer que ele consegue fazer a ligação a base de dados, certo?

Os meus conhecimentos de php são praticamente nulos

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

testa

com as variáveis dos valores dos parametros antes dos parâmetros,

e se não der altera os parâmetros «$STH->bindParam(':nome', $v_nome);»

para «$STH->bindValue(':nome', $v_nome, PDO::Param_str);»

cumps

acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

agora apresentaste algo muito estranho no último código:

$this->connection->close();

afinal este código faz parte de alguma classe ?

porque é que anteriormente a ligação é guardada na variável $conn, e agora aparece este código ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PaisNeto

agora apresentaste algo muito estranho no último código:

$this->connection->close();

afinal este código faz parte de alguma classe ?

porque é que anteriormente a ligação é guardada na variável $conn, e agora aparece este código ?

isso estava a mais... tinha copiado de outro exemplo

boas

testa

com as variáveis dos valores dos parametros antes dos parâmetros,

e se não der altera os parâmetros «$STH->bindParam(':nome', $v_nome);»

para «$STH->bindValue(':nome', $v_nome, PDO::Param_str);»

cumps

acao

não funcionou.

experimentei fazer um select a tabela e retornou-me os dados, pelos vistos é qualquer coisa no insert que não estou a fazer bem....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

isso estava a mais... tinha copiado de outro exemplo

estava a mais e é o suficiente para estoirar completamente o script, e se é para assumir que código apresentado aqui não é o código a ser executado, ajudas serão muito difícies/complicadas


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PaisNeto

Já consegui resolver a situação, segui outro tutorial....

Fica aqui o código utilizado, pode servir para outro utilizador

<?php
define( 'MYSQL_HOST', 'localhost' );
define( 'MYSQL_USER', 'user_user' );
define( 'MYSQL_PASSWORD', 'userpass' );
define( 'MYSQL_DB_NAME', 'extreme' );
try
{
   $PDO = new PDO( 'mysql:host=' . MYSQL_HOST . ';dbname=' . MYSQL_DB_NAME, MYSQL_USER, MYSQL_PASSWORD );
}
catch ( PDOException $e )
{
   echo 'Erro ao conectar com o MySQL: ' . $e->getMessage();
}
$v_nome       = 'Nuno';
$v_bi         = '2123321';
$v_localidade = 'local';
$v_tlm        = '9871238712';
$v_mota       = 'zundape';
$v_cilindrada = '900';
$v_ciclos     = '4T';
$v_classe     = 'pro';
$v_equipa     = 'masdnasd';
$v_email      = 'aaa@aaa.com';
$sql = "INSERT INTO subida (nome,bi,localidade,telemovel,moto,ciclindrada,ciclos,classe,equipa,email)
                        VALUES(:nome,:bi,:localidade,:telemovel,:moto,:cilindrada,:ciclos,:classe,:equipa,:email)";
$STH = $PDO->prepare( $sql );
$STH->bindParam(':nome',       $v_nome);
$STH->bindParam(':bi',         $v_bi);
$STH->bindParam(':localidade', $v_localidade);
$STH->bindParam(':telemovel',  $v_tlm);
$STH->bindParam(':moto',       $v_mota);
$STH->bindParam(':cilindrada', $v_cilindrada);
$STH->bindParam(':ciclos',     $v_ciclos);
$STH->bindParam(':classe',     $v_classe);
$STH->bindParam(':equipa',     $v_equipa);
$STH->bindParam(':email',      $v_email);

$result = $STH->execute();

if ( ! $result )
{
   var_dump( $STH->errorInfo() );
   exit;
}

echo $STH->rowCount() . "linhas inseridas";

?>

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.