Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados,
Estive acompanhando o livro do Pablo Dall'Oglio (PHP Programando com Orientação a Objetos) e cheguei a um ponto onde não consigo mais continuar devido um erro no método query() do PDO.
Situação:
Arquivo TRecord.class.php
<?php
abstract class TRecord {
protected $data; // array contendo os dados do objeto
public function __construct($id = null) {...}
public function __clone() {...}
private function __set($prop, $value) {...}
private function __get($prop){...}
private function getEntity(){...}
public function fromArray($data){...}
public function toArray(){...}
public function store(){...}
/**
* método load()
* recupera (retorna) um objeto da base de dados
* através de seu ID e instancia ele na memória
* @param $id = ID do objeto
*/
public function load($id){
// instancia a instrução de SELECT
$sql = new TSqlSelect();
$sql->setEntity($this->getEntity());
$sql->addColumn('*');
// cria o critério de seleção baseado no ID
$criteria = new TCriteria();
$criteria->add(new TFilter('id', '=', $id));
$sql->setCriteria($criteria);
// obtem transação ativa
if($conn = TTransaction::get()){
// faz o log e executa o SQL
TTransaction::log($sql->getInstruction());
$result = $conn->query("SELECT * FROM aluno"); //- ERRO AQUI
//$result = $conn->query($sql->getInstruction());
// se retorna algum resultado
if($result){
// retorna os dados em forma de objeto
$object = $result->fetchObject(get_class($this));
}
return $object;
}
else {
// se não tiver transação, retorna uma exceção
throw new Exception('Não há transação ativa!');
}
}
}
?>
Arquivo model_get.php
<?php
function __autoload($classe){...}
class AlunoRecord extends TRecord {}
class CursoRecord extends TRecord {}
try {
TTransaction::open('banco_my');
$aluno = new AlunoRecord(1);
echo "obtendo aluno 1<br>\n";
echo "==============<br>\n";
echo 'Nome : '. $aluno->nome . "<br>\n";
echo 'Endereço : '. $aluno->endereco . "<br>\n";
TTransaction::close();echo 'Erro: '.$e->getMessage();
TTransaction::rollback();
}
?>
Quando executo o arquivo model_get.php no browser o apache cai. Porém, quando altero a linha $result = $conn->query("SELECT * FROM aluno"); para $result = $conn->query("SELECT nome FROM aluno"); o script me traz o resultado, mas não é o que preciso, pois necessito de todas as colunas da tabela aluno.
Estive lendo algo sobre o erro 'SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)', porém não encontrei uma solução para mim.
Desde já agradeço a ajuda.
Att,
Victor.
Carregando comentários...