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

AprendendoC

Erro com PDO

Mensagens Recomendadas

AprendendoC

fala galera, estou com um problema na hora de executar o sql usando o pdo...

segue codigo Conexao.class.php

<?php
/**
* Classe para conexão com o Banco de Dados Usando PDO
*
* @author Isaias Darci Dieterich
* @version 0.1
* @since 05/08/2013
*
*/
class Conexao extends PDO {
private $dataBase = 'mysql';
private $host = 'localhost';
private $dbName = 'teste';
private $user = 'root';
private $pass = '';
private $conexao = NULL;

function __construct() {
try{
$this->conexao = parent::__construct($this->dataBase.':host='.$this->host.';dbname='.$this->dbName, $this->user, $this->pass);
$this->conexao = parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//echo 'Sucesso ao se conectar na Base de Dados';
}catch(PDOException $erro){
//echo 'Erro ao se conectar na Base de Dados';
}
}//construct

function __destruct(){
$this->conexao = NULL;
}//destruct

function inserir($objeto){
// SQL = "INSERT INTO TABELA (campos) VALUES (:campos);"
$sql = "INSERT INTO usuarios (";
for($i = 0; $i < count($objeto); $i++){
$sql .= key($objeto);
next($objeto);
if($i < (count($objeto) - 1)){
$sql .= ", ";
}else{
$sql .= ") ";
}
}//for
reset($objeto);
$sql .= "VALUES (";
for($i = 0; $i < count($objeto); $i++){
$sql .= is_numeric($objeto[key($objeto)]) ? ":".$objeto[key($objeto)] : "':".$objeto[key($objeto)]."'";
next($objeto);
if($i < (count($objeto) -1)){
$sql .= ", ";
}else{
$sql .= ") ";
}
}//for
reset($objeto);
$binVal = "";
for($i = 0; $i < count($objeto); $i++){
$binVal .= "':".$objeto[key($objeto)]."'";
if($i < (count($objeto) -1)){
$binVal .= ", ".key($objeto).", ";
}else{
$binVal .= ", ".key($objeto);
}
next($objeto);
}//for
try{
$query = $this->prepare($sql);
$query->bindValue($binVal, PDO::PARAM_STR);
$query->execute();
}catch(PDOException $erroInserir){
echo 'Erro ao Inserir Dados!'.$erroInserir->getMessage();
}
//echo $sql;
//echo $binVal;
}//inserir
}
?>

e o codigo da pagina de teste.php

<?php
include_once('conexao.class.php');
$con = new Conexao();

$testArr = array(
"nome" => "Isaias",
"idade" => 20);
$con->inserir($testArr);

?>

e o erro que ele esta acusando é este

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

alguem sabe m dizer o porque deste erro?

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Mostra tb o erro específico da DB, esse deve conter mais informação.

Não extendas classes que não foram feitas para ser extendidas a não ser que saibas bem como funcionam. Muitas vezes esse tipo de acções cria resultados inesperados, mesmo que escondidos algures.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

penso que aqui faltará a conexão.

nos parametros falta o nome do campo ou o valor e não pode ser só um se no array tem dois valores.

$query = $this->prepare($sql);
$query->bindValue($binVal, PDO::PARAM_STR);

$query = $this->conexao->prepare($sql);
$query = bindValue(------, ------, PDO::param_STR);

cumps

acao

Editado por acao

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.