Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vitinhu

[Resolvido] PDO: Cardinality violation - Erro

Recommended Posts

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();
} catch (Exception $e) {
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andei pesquisando, e esse erro foi relatado quando não existe nenhuma coluna como chave primária da tabela. Verifique a integridade da tabela se:

- Existe chave primária (simples ou composta);

- Existe chaves únicas (se existir, tente remover);

- Relacionamento com outras tabelas.

 

Vou pesquisar mais sobre isso, mas em primeira instância, é isso.

 

Sobre o apache cair, não vi ainda.

Eu li uma boa parte do livro do Pablo Dall'Oglio, ele é professor aonde eu fazia faculdade. Como professor, é excelente. Mas não gostei muito do livro. Comete alguns erros e uns trechos possui certa ambiguidade que pode levar ao erro. Ai eu mudei para o livro do Matt Zandstra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andei pesquisando, e esse erro foi relatado quando não existe nenhuma coluna como chave primária da tabela. Verifique a integridade da tabela se:

- Existe chave primária (simples ou composta);

- Existe chaves únicas (se existir, tente remover);

- Relacionamento com outras tabelas.

 

Vou pesquisar mais sobre isso, mas em primeira instância, é isso.

 

Sobre o apache cair, não vi ainda.

Eu li uma boa parte do livro do Pablo Dall'Oglio, ele é professor aonde eu fazia faculdade. Como professor, é excelente. Mas não gostei muito do livro. Comete alguns erros e uns trechos possui certa ambiguidade que pode levar ao erro. Ai eu mudei para o livro do Matt Zandstra.

 

@Gabriel Heming

 

Realmente minha tabela não possuia primary key definida, foi então que, exclui ela e criei novamente, restartei o apache e o mysql e ao executar o fonte via browser o apache caiu novamente e não houve tempo de exibir sequer um erro.

 

O mais cruel é que ao alterar a query de (SELECT * FROM aluno) para (SELECT nome FROM aluno) o script é executado normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vamos por partes então.

 

Qual é o servidor que você está utilizando? Wamp, Xampp, Lampp, "instalado na unha"...

 

Passe o código da instância da PDO, pode ser alguma coisa nas opções. Ou melhor, passe todo o código das classes, para eu testar aqui. Utilize o BBCode Spoiler, que você encontra no combobox (select) do editor de texto. Ai o post não fica tão extenso para o código completo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou utilizando o XAMPP (instalado no braço - muitos nexts (rsrsrs)).

PHP version 5.2.8

Apache version 2.2.11

 

Vamos aos fontes.

 

Pacote ado:

 

ado/TConnection.class.php

 

 

<?php

/**

* classe TConnection

* gerencia conexões com banco de dados através de arquivos de configuração

*/

final class TConnection {

/**

* método __construct()

* não existirão instâncias de TConnection, por isso estamos marcando-o como private

*/

private function __construct() {}

 

/**

* método open()

* recebe o nome do banco de dados e instancia o objeto PDO correspondente

* @param $name = nome do banco de dados

*/

public static function open($name) {

// verifica se existe arquivo de configuração para este banco de dados

if(file_exists("../config/{$name}.ini")) {

// lê o arquivo.ini e retorna um array

$db = parse_ini_file("../config/{$name}.ini");

}

else {

// se não existir, lança um erro

throw new Exception("Arquivo '$name' não encontrado");

}

 

// lê as informações contidas no arquivo

$user = $db['user'];

$pass = $db['pass'];

$name = $db['name'];

$host = $db['host'];

$type = $db['type'];

 

// descobre qual o tipo (drive) de banco de dados a ser utilizado

switch ($type) {

case 'pgsql':

$conn = new PDO("pgsql:dbname={$name}; user={$user}; password={$pass}; host=$host");

break;

case 'mysql':

$conn = new PDO("mysql:host={$host};dbname={$name}", $user, $pass);

break;

case 'oci8':

$conn = new PDO("oci:dbname={$name}", $user, $pass);

break;

}

 

// define para que o PDO lance exceções na ocorrência de erros

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 

// retorna o objeto instanciado

return $conn;

}

}

?>

 

 

 

ado/TCriteria.class.php

 

 

<?php

/**

* classe TCriteria

* Esta classe provê uma interface para definição de critérios

*/

class TCriteria extends TExpression {

 

private $expressions; // armazena a lista de expressões

private $operators; // armazena a lista de operadores

private $properties; // propriedades do critério

 

/**

* método add()

* adiciona uma expressão ao critério

* @param $expression = expressão (objeto TExpression)

* @param $operator = operador lógico de comparação

*/

public function add(TExpression $expression, $operator = self::AND_OPERATOR) {

// na primeira vez não precisa operador lógico para concatenar

if(empty($this->expressions)) {

unset($operator);

}

 

// agrega o resultado da expressão à lista de expressões

$this->expressions[] = $expression;

$this->operators[] = $operator;

}

 

/**

* método dump()

* retorna a expressão final

*/

public function dump() {

// concatena a lista de expressões

if(is_array($this->expressions)) {

foreach ($this->expressions as $i => $expression) {

$operador = $this->operators[$i];

// concatena o operador com a respectiva expressão

$result .= $operador . $expression->dump() . ' ';

}

$result = trim($result);

return "({$result})";

}

}

 

/**

* método setProperty()

* define um valor de uma propriedade

* @param $property = propriedade

* @param $value = valor

*/

public function setProperty($property, $value) {

$this->properties[$property] = $value;

}

 

/**

* método getProperty()

* retorna o valor de uma propriedade

* @param $property = propriedade

*/

public function getProperty($property) {

return $this->properties[$property];

}

}

 

 

ado/TExpression.class.php

 

 

<?php

/**

* classe TExpression

* classe abstrata para gerenciar expressões

*/

abstract class TExpression {

// operadores lógicos

const AND_OPERATOR = 'AND ';

const OR_OPERATOR = 'OR ';

// marca método dump como obrigatório

abstract public function dump();

}

?>

 

 

ado/TFilter.class.php

 

 

<?php

/**

* classe TFilter

* Esta classe provê uma interface para definição de filtros de seleção

*/

class TFilter extends TExpression {

 

private $variable; // variável

private $operator; // operador

private $value; // valor

 

/**

* método __construct

* @param $variable = variável

* @param $operator = operador (>,<)

* @param $value = valor a ser comparado

*/

public function __construct($variable, $operator, $value) {

// armazena as propriedades

$this->variable = $variable;

$this->operator = $operator;

// transforma o valor de acordo com certas regras

// antes de atribuir à propriedade $this->value

$this->value = $this->transform($value);

}

 

/**

* método transform()

* recebe um valor e faz modificações necessárias

* para ele ser interpretado pelo bando de dados

* podendo ser um integer/string/boolean ou array

* @param $value = valor a ser transformado

*/

private function transform($value) {

// caso seja um array

if(is_array($value)) {

// percorre os valore

foreach ($value as $x) {

// se for um inteiro

if(is_integer($x)) {

$foo[] = $x;

}

else if(is_string($x)) {

// adiciona aspas

$foo[] = "'$x'";

}

}

// converte o array em string separada por virgula ','

$result = '(' . implode(',', $foo) . ')';

}

// caso seja uma string

else if(is_string($value)) {

// adiciona aspas

$result = "'$value'";

}

// caso seja um valo nulo

else if(is_null($value)) {

$result = 'NULL';

}

// case seja booleano

else if(is_bool($value)) {

// armazena TRUE ou FALSE

$result = $value ? 'TRUE' : 'FALSE';

}

else {

$result = $value;

}

// retorna o valor

return $result;

}

 

/**

* método dump()

* retorna o filtro em forma de expressão

*/

public function dump() {

// concatena a expressão

return "{$this->variable} {$this->operator} {$this->value}";

}

}

?>

 

 

ado/TLogger.class.php

 

 

<?php

/**

* classe TLogger

* Esta classe prove uma interface abstrata para definição de algoritimo de LOG

*/

abstract class TLogger {

 

protected $filename; // local do arquivo de LOG

 

/**

* método __construct()

* instancia de um logger

* @param $filename = local do arquivo de LOG

*/

public function __construct($filename) {

$this->filename = $filename;

// reseta o conteudo do arquivo

file_put_contents($filename, '');

}

 

// define o método write como obrigatório

abstract function write($message);

}

?>

 

 

ado/TLoggerTXT.class.php

 

 

<?php

/**

* classe TLoggerTXT

* implementa o algoritmo de LOG em TXT

*/

class TLoggerTXT extends TLogger {

/**

* método write()

* @param $message = mensagem a ser escrita

*/

public function write($message) {

$time = date('Y-m-d H:i:s');

// monta a string

$text = "$time :: $message\n";

// adiciona ao final do arquivo

$handler = fopen($this->filename, 'a');

fwrite($handler, $text);

fclose($handler);

}

}

 

 

ado/TRecord.class.php

 

 

<?php

/**

* classe TRecord

* esta classe prove os metodos necessários para persistir e

* recuperar objetos da base de dados (Active Record)

*/

abstract class TRecord {

 

protected $data; // array contendo os dados do objeto

 

/**

* método __construct()

* instancia de um Active Record. Se passado o $id, já carrega o objeto

* @param [$id] = ID do objeto

*/

public function __construct($id = null) {

// se o ID for informado

if($id) {

// carrega o objeto correspondente

$object = $this->load($id);

if($object) {

$this->fromArray($object->toArray());

}

}

}

 

/**

* método __clone()

* executa quando o objeto for clonado.

* limpa o ID para que seja gerado um novo ID para o clone.

*/

public function __clone() {

unset($this->id);

}

 

/**

* método __set()

* executado sempre que uma propriedade for atribuida

* @param $prop = propriedade

* @param $value = valor atribuido a propriedade

*/

private function __set($prop, $value) {

//verifica se existe o método set_<propriedade>

if(method_exists($this, 'set_'.$prop)){

// executa o método set_<propriedade>

call_user_func(array($this, 'set_'.$prop), $value);

}

// se não existe atribui o valor da propriedade

else {

// atribui o valor da propriedade

$this->data[$prop] = $value;

}

}

 

/**

* método __get()

* executado sempre que uma propriedade for requirida

* @param $prop = propriedade requirida

*/

private function __get($prop){

// verifica se existe método get_<propriedade>

if(method_exists($this, 'get_'.$prop)){

// executa o método get_<propriedade>

return call_user_func(array($this, 'set_'.$prop));

}

// se não existe retorna o valor da propriedade

else {

// retorna o valor da propriedade

return $this->data[$prop];

}

}

 

/**

* método getEntity()

* retorna o nome da entidade (tabela)

*/

private function getEntity(){

// obtem o nome da classe

$classe = strtolower(get_class($this));

// retorna o nome da classe - "Record"

return substr($classe, 0, -6);

}

 

/**

* método fromArray()

* preenche os dados do objeto com um array

* @param $data = array de dados

*/

public function fromArray($data){

$this->data = $data;

}

 

/**

* método toArray()

* retorna os dados do objeto como array

*/

public function toArray(){

return $this->data;

}

 

/**

* método store()

* armazena o objeto na base de dados e retorna o número de

* linha afetadas pela inserção SQL (zero ou um)

*/

public function store(){

// verifica se tem ID ou se existe o registro na base de dados

if(empty($this->data['id']) or (!$this->load($this->id))){

// incrementa o ID

$this->id = $this->getLast() +1;

// cria uma instrução INSERT

$sql = new TSqlInsert();

$sql->setEntity($this->getEntity());

// perforre os dados do objeto

foreach ($this->data as $key => $value) {

// passa os dados do objeto para o SQL

$sql->setRowData($key, $this->$key);

}

}

else {

// instancia uma instrução UPDATE

$sql = new TSqlUpdate();

$sql->setEntity($this->getEntity());

// cria um critério de seleção baseado no ID

$criteria = new TCriteria();

$criteria->add(new TFilter('id', '=', $this->id));

$sql->setCriteria($criteria);

// perforre os dados do objeto

foreach ($this->data as $key => $value) {

// o ID não precisa ir no update

if($key !== 'id'){

// passa os dados do objeto para o SQL

$sql->setRowData($key, $this->$key);

}

}

}

// obtem transação ativa

if($conn = TTransaction::get()){

// faz o log e executa o SQL

TTransaction::log($sql->getInstruction());

$result = $conn->exec($sql->getInstruction());

// retorna o resultado

return $result;

}

else {

// se não tiver transação, retorna uma exceção

throw new Exception('Não há transação ativa!');

}

}

 

/**

* 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");

//$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!');

}

}

 

/**

* método delete()

* exclui um objeto da base de dados através de seu ID.

* @param $id = ID do objeto

*/

public function delete($id = NULL){

// o ID é o parametro ou a propriedade ID

$id = $id ? $id : $this->id;

// instancia a instrução de DELETE

$sql = new TSqlDelete();

$sql->setEntity($this->getEntity());

 

// 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($sql->getInstruction());

// retorna o resultado

return $result;

}

else {

// se não tiver transação, retorna uma exceção

throw new Exception('Não há transação ativa!');

}

}

 

/**

* método getLast()

* retorna o ultimo ID

*/

private function getLast(){

// obtem transação ativa

if($conn = TTransaction::get()){

// instancia a instrução de SELECT

$sql = new TSqlSelect();

$sql->addColumn('max(ID) as ID');

$sql->setEntity($this->getEntity());

// faz o log e executa o SQL

TTransaction::log($sql->getInstruction());

$result = $conn->query($sql->getInstruction());

// retorna os dados do banco

$row = $result->fetch();

return $row[0];

}

else {

// se não tiver transação, retorna uma exceção

throw new Exception('Não há transação ativa!');

}

}

}

?>

 

 

ado/TSqlInstruction.class.php

 

 

<?php

/**

* classe TSqlInstruction

* Esta classe provê os métodos em comum entre todas as instruções

* SQL (SELECT, INSET, DELETE e UPDATE)

*/

abstract class TSqlInstruction {

 

protected $sql; // armazena as instruções SQL

protected $criteria; // armazena o objeto critério

protected $entity; // armazena o nome da tabela

 

/**

* método setEntity()

* define o nome da entidade (tabela) a ser manipulada pelas instruções SQL

* @param $entity = tabela

*/

final public function setEntity($entity) {

$this->entity = $entity;

}

 

/**

* método getEntity()

* retorna o nome da entidade (tabela)

*/

final public function getEntity() {

return $this->entity;

}

 

/**

* método setCriteria()

* define um critério de seleção de dados através da combinação de um objeto

* do tipo TCriteria, que oferece uma interface para definição de critérios

* @param TCriteria $criteria

*/

public function setCriteria(TCriteria $criteria) {

$this->criteria = $criteria;

}

 

/**

* método abstrato getInstruction()

* declarando como <abstract> obrigamos sua declaração nas classes filhas,

* uma vez que seu comportamente será definido em cada uma delas (polimorfismo)

*/

abstract function getInstruction();

 

}

?>

 

 

ado/TSqlSelect.class.php

 

 

<?php

/**

* classe TSqlSelect

* esta classe provê meios para manipulação de uma instrução SELECT no banco de dados

*/

final class TSqlSelect extends TSqlInstruction {

 

private $columns; // armazena as colunas para montar a SQL

 

/**

* método addColumn()

* adiciona uma coluna a ser retornada pelo SELECT

* @param $column = coluna da tabela

*/

public function addColumn($column) {

// adiciona a coluna no array

$this->columns[] = $column;

}

 

/**

* método getInstruction()

* retorna a instrução SELECT em forma de string

*/

public function getInstruction() {

$this->sql = 'SELECT ';

// monta a string com os nomes de colunas

$this->sql .= implode(', ', $this->columns);

// adiciona a clausula FROM na string

$this->sql .= " FROM {$this->entity}";

// retorna a clausula WHERE do objeto $this->criteria

if($this->criteria) {

$expression = $this->criteria->dump();

if($expression) {

$this->sql .= ' WHERE ' . $expression;

}

// obtem as propriedades do critério

$order = $this->criteria->getProperty('order');

$limit = $this->criteria->getProperty('limit');

$offset = $this->criteria->getProperty('offset');

 

// obtem a ordenação do select

if($order) {

$this->sql .= ' ORDER BY ' . $order;

}

if($limit) {

$this->sql .= ' LIMIT ' . $limit;

}

if($offset) {

$this->sql .= ' OFFSET ' . $offset;

}

}

return $this->sql;

}

}

?>

 

 

ado/TTransaction.class.php

 

 

<?php

/**

* classe TTransaction

* esta classe provê métodos necessários para manipulações de transações

*/

final class TTransaction {

 

private static $conn; // conexão ativa

private static $logger; // objeto de LOG

 

/**

* método __construct()

* está declarado como private para impedir que se crie instância de TTransation

*/

private function __construct(){}

 

/**

* método open()

* abre uma transação e uma conexão com o banco de dados

* @param $database = nome do banco de dados

*/

public static function open($database) {

// abre uma conexão e armazena na propriedade estática $conn

if(empty(self::$conn)) {

self::$conn = TConnection::open($database);

// inicia a transação

self::$conn->beginTransaction();

// desliga o log de SQL

self::$logger = null;

}

}

 

/**

* método get()

* retorna a conexão ativa da transação

*/

public static function get() {

// retorna a conexão ativa

return self::$conn;

}

 

/**

* método rollback()

* desfaz todas as operações realizada na transação

*/

public static function rollback() {

if(self::$conn) {

// desfaz as operações realizada durante a transação

self::$conn->rollBack();

self::$conn = null;

}

}

 

/**

* método close()

* aplica todas operações realizadas e fecha a transação

*/

public static function close() {

if(self::$conn) {

// aplica as operações realizadas durante a transação

self::$conn->commit();

self::$conn = null;

}

}

 

/**

* metodo setLogger()

* @param TLogger $logger = algoritimo de LOG a ser usado

*/

public static function setLogger(TLogger $logger) {

self::$logger = $logger;

}

 

/**

* método log()

* armazena uma mensagem no arquivo de LOG

* @param $message = mensagem a ser inserida no arquivo de LOG

*/

public static function log($message) {

// verifica se existe um logger

if(self::$logger) {

// escreve a mensagem no arquivo

self::$logger->write($message);

}

}

 

}

?>

 

 

Pacote config:

 

config/banco_my.ini

 

 

host = localhost

name = sistema

user = root

pass =

type = mysql

 

 

Pacote examples:

 

examples/model_get.php

 

 

<?php

function __autoload($classe){

if(file_exists("../ado/{$classe}.class.php")){

include_once "../ado/{$classe}.class.php";

}

}

 

/**

* classe MenuRecord, filha de TRecord

* persiste um menu no banco de dados

*/

class AlunoRecord extends TRecord {}

 

/**

* classe AreaRecord, filha de TRecord

* persiste uma area no banco de dados

*/

class CursoRecord extends TRecord {}

 

// insere novos objetos no banco de dados

try {

// abre a conexão com teste2

TTransaction::open('banco_my');

// define uma stratégia de LOG

TTransaction::setLogger(new TLoggerTXT('../tmp/log.txt'));

// escreve a mensagem de LOG

 

// instancia de um novo menu

$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";

 

//instancia uma nova area

$curso = new CursoRecord(2);

echo "obtendo curso 2\n";

echo "==============<br>\n";

echo 'Nome : '. $curso->nome . "<br>\n";

echo 'Duração : '. $curso->duracao . "<br>\n";

 

// fecha conexão

TTransaction::close();

} catch (Exception $e) {

// exibe a mensagem gerada pela exceção

echo 'Erro: '.$e->getMessage();

// desfaz as transações

TTransaction::rollback();

}

?>

 

 

E por ultimo o pacote tmp:

 

tmp/log.txt

 

Estão ae. Vamos ver se consegue reproduzir o erro.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até estava esquecendo. Você olhou os logs do apache?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até estava esquecendo. Você olhou os logs do apache?

 

Limpei o error.log do apache e reproduzi o erro.

E fui deparado somente com isso:

 

[Wed Aug 01 11:56:43 2012] [notice] Parent: child process exited with status 3958377386 -- Restarting.

 

=/

Compartilhar este post


Link para o post
Compartilhar em outros sites

da uma olhada no access.log, e, pelo horário, veja o que foi acessado antes do erro. Saber o que foi acessado, pode ajudar.

 

Como resposta a um bug parecido, veio essa aqui:

http://www.java-samples.com/showtutorial.php?tutorialid=1050

 

Mas veja que o número do erro é outro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No access.log não me diz muita coisa.

 

127.0.0.1 - - [01/Aug/2012:11:59:06 -0300] "GET /app_oo/examples/ HTTP/1.1" 200 1957

 

Vou seguir as orientações do link que você passou.

 

Conseguisse reproduzir o erro na sua máquina??

 

Copiei o arquivo libmysql.dll para o diretório System32 do windows e reiniciei o computador e o erro permanece.

 

@Gabriel Heming conseguisse reproduzir o erro na sua máquina??

 

Desde já agradeço.

 

Att,

Victor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo indica que o problema está em TRecord::load() , mas não ficou claro exatamente onde.

 

Experimente instalar a xDebug. Isso de "cair" o Apache aparenta ser algum tipo de loop infinito e como por padrão essas coisas não são automaticamente abortadas, vão sendo executadas até estourar tudo.

 

Com a xDebug, não lembro se apenas com as configurações-padrão ou não, quando um loop infinito é detectado, ela aborta a execução por você, avisando que tal ação foi tomada e o porquê, isto é, qual arquivo em qual linha forçou ela a tomar essa atitude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A modelagem do banco (as DDL's), por favor.

 

@Evandro Oliveira está é a modelagem.. Muito simples por sinal! heheh..

 

 

CREATE TABLE IF NOT EXISTS `aluno` (

`id` int(6) NOT NULL,

`nome` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`endereco` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

INSERT INTO `aluno` (`id`, `nome`, `endereco`) VALUES

(1, 'Victor Cardoso Higino', 'Rua das dores');

 

CREATE TABLE IF NOT EXISTS `curso` (

`id` int(6) NOT NULL,

`nome` varchar(255) NOT NULL,

`duracao` int(6) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

INSERT INTO `curso` (`id`, `nome`, `duracao`) VALUES

(1, 'Sistemas de informação', 456);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

@Evandro Oliveira está é a modelagem.. Muito simples por sinal! heheh..

 

 

CREATE TABLE IF NOT EXISTS `aluno` (

`id` int(6) NOT NULL,

`nome` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`endereco` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

INSERT INTO `aluno` (`id`, `nome`, `endereco`) VALUES

(1, 'Victor Cardoso Higino', 'Rua das dores');

 

CREATE TABLE IF NOT EXISTS `curso` (

`id` int(6) NOT NULL,

`nome` varchar(255) NOT NULL,

`duracao` int(6) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

INSERT INTO `curso` (`id`, `nome`, `duracao`) VALUES

(1, 'Sistemas de informação', 456);

 

 

 

Tirando os "undefined variable", acredito que meu output tenha sido satisfatório:

 

<br />
<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined variable: operator in /home/evandro/Sites/imasters/forum/cardinality/ado/TCriteria.class.php on line <i>26</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0008</td><td bgcolor='#eeeeec' align='right'>245848</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0049</td><td bgcolor='#eeeeec' align='right'>353480</td><td bgcolor='#eeeeec'>TRecord->__construct(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>29</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0049</td><td bgcolor='#eeeeec' align='right'>353544</td><td bgcolor='#eeeeec'>TRecord->load(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TRecord.class.php' bgcolor='#eeeeec'>../TRecord.class.php<b>:</b>20</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.0066</td><td bgcolor='#eeeeec' align='right'>400368</td><td bgcolor='#eeeeec'>TCriteria->add(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TRecord.class.php' bgcolor='#eeeeec'>../TRecord.class.php<b>:</b>165</td></tr>
</table></font>
<br />
<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined variable: result in /home/evandro/Sites/imasters/forum/cardinality/ado/TCriteria.class.php on line <i>39</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0008</td><td bgcolor='#eeeeec' align='right'>245848</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0049</td><td bgcolor='#eeeeec' align='right'>353480</td><td bgcolor='#eeeeec'>TRecord->__construct(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>29</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0049</td><td bgcolor='#eeeeec' align='right'>353544</td><td bgcolor='#eeeeec'>TRecord->load(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TRecord.class.php' bgcolor='#eeeeec'>../TRecord.class.php<b>:</b>20</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.0073</td><td bgcolor='#eeeeec' align='right'>400960</td><td bgcolor='#eeeeec'>TSqlSelect->getInstruction(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TRecord.class.php' bgcolor='#eeeeec'>../TRecord.class.php<b>:</b>170</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>5</td><td bgcolor='#eeeeec' align='center'>0.0073</td><td bgcolor='#eeeeec' align='right'>401344</td><td bgcolor='#eeeeec'>TCriteria->dump(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TSqlSelect.class.php' bgcolor='#eeeeec'>../TSqlSelect.class.php<b>:</b>32</td></tr>
</table></font>
obtendo aluno 1<br>
==============<br>
Nome : Victor Cardoso Higino<br>
Endereço : Rua das dores<br>
<br />
<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined variable: operator in /home/evandro/Sites/imasters/forum/cardinality/ado/TCriteria.class.php on line <i>26</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0008</td><td bgcolor='#eeeeec' align='right'>245848</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0084</td><td bgcolor='#eeeeec' align='right'>401864</td><td bgcolor='#eeeeec'>TRecord->__construct(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>36</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0084</td><td bgcolor='#eeeeec' align='right'>401864</td><td bgcolor='#eeeeec'>TRecord->load(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TRecord.class.php' bgcolor='#eeeeec'>../TRecord.class.php<b>:</b>20</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.0085</td><td bgcolor='#eeeeec' align='right'>403360</td><td bgcolor='#eeeeec'>TCriteria->add(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TRecord.class.php' bgcolor='#eeeeec'>../TRecord.class.php<b>:</b>165</td></tr>
</table></font>
<br />
<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined variable: result in /home/evandro/Sites/imasters/forum/cardinality/ado/TCriteria.class.php on line <i>39</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0008</td><td bgcolor='#eeeeec' align='right'>245848</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0084</td><td bgcolor='#eeeeec' align='right'>401864</td><td bgcolor='#eeeeec'>TRecord->__construct(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>36</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0084</td><td bgcolor='#eeeeec' align='right'>401864</td><td bgcolor='#eeeeec'>TRecord->load(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TRecord.class.php' bgcolor='#eeeeec'>../TRecord.class.php<b>:</b>20</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.0087</td><td bgcolor='#eeeeec' align='right'>403824</td><td bgcolor='#eeeeec'>TSqlSelect->getInstruction(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TRecord.class.php' bgcolor='#eeeeec'>../TRecord.class.php<b>:</b>170</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>5</td><td bgcolor='#eeeeec' align='center'>0.0087</td><td bgcolor='#eeeeec' align='right'>403864</td><td bgcolor='#eeeeec'>TCriteria->dump(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/ado/TSqlSelect.class.php' bgcolor='#eeeeec'>../TSqlSelect.class.php<b>:</b>32</td></tr>
</table></font>
obtendo curso 2
==============<br>
Nome : Victor Cardoso Higino<br>
<br />
<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: duracao in /home/evandro/Sites/imasters/forum/cardinality/ado/TRecord.class.php on line <i>69</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0008</td><td bgcolor='#eeeeec' align='right'>245848</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0096</td><td bgcolor='#eeeeec' align='right'>403408</td><td bgcolor='#eeeeec'>TRecord->__get(  )</td><td title='/home/evandro/Sites/imasters/forum/cardinality/examples/model_get.php' bgcolor='#eeeeec'>../model_get.php<b>:</b>40</td></tr>
</table></font>
Duração : <br>

 

 

Apenas peguei os códigos que você postou aqui e abri examples/model_get.php no navegador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.