Ir para o conteúdo
t0ze

[Resolvido] "Chamar" objecto PDO dentro de uma classe.

Mensagens Recomendadas

t0ze

Boa noite,

Estou com um problema que acho ser de organização de pastas do meu projecto, o que faz com que não consiga aceder ao objecto $db que é um PDO, dentro da minha classe "Animais".

Na pratica, tenho na raiz do projecto algo assim

/includes

/constants

/classes

/functions

/js

/stye

/index.php

A criação do objecto $db está a ser feita em /includes/connection.php da seguinte forma:

<?php
require("constants.php"); //contem os valores de DB_ ...
try {
$db = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME.'', DB_USER, DB_PASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = ('SET NAMES "utf8"; SET CHARACTER SET utf8; SET COLLATION_CONNECTION = "utf8_general_ci"');
$db->exec($query);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
?>

E no meu ficheiro index.php onde incluo o ficheiro /includes/connection.php incluo também o ficheiro /classes/animal.php assim:

<?php require_once("includes/session.php"); ?>
<?php require_once("includes/connection.php"); ?>
<?php require_once("includes/functions.php");?>
<?php include("includes/html.php"); ?>
<?php include("includes/header.php"); ?>
<?php
confirm_logged_in();
@validate_parameter();
?>
<?php include("includes/menu.php"); ?>
<?php include("classes/pagination.php"); ?>
<?php include("classes/animal.php"); ?>
</div>
<?php
$horse = new animal($id=276);
?>

E na minha /classes/animal.php o seguinte:

<?php
Class animal {

 public $animal;
 public function __construct($id = NULL, $n = NULL){
if ($id != NULL || $n != NULL) {
  $query = $db->Prepare("SELECT animal.*
						FROM animal
						WHERE id = :id OR n = :n
						LIMIT 1");
  $query->bindValue(':id', $id );
  $query->bindValue(':n', $n);

  try {
	$query->execute();
  }catch (PDOException $e) {

  }
  if ($query->rowCount() == 1) {
	   $animal = $query->fetch(PDO::FETCH_ASSOC);
	  $this->animal= $animal;
  }
  }
 }
....
...
..

E isto tudo dá-me um erro no inde.php

Notice: Undefined variable: db in C:\inetpub\wwwroot\effective\classes\animal.php on line 10
Fatal error: Call to a member function Prepare() on a non-object in C:\inetpub\wwwroot\effective\classes\animal.php on line 10

Já tentei colocar o /includes/connection.php no ficheiro /classes/animal.php mas continua com erros... alguma ideia/sugestão de organizar isto ?

Obg

Editado por t0ze

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
scorch

Coloca isto: :)

public function __construct($id = NULL, $n = NULL){
    //É necessário indicar a variável como global na função
    global $db;


       if ($id != NULL || $n != NULL) {
         $query = $db->Prepare("SELECT animal.*
                                                       FROM animal
                                                       WHERE id = :id OR n = :n
                                                       LIMIT 1");
         $query->bindValue(':id', $id );
         $query->bindValue(':n', $n);

         try {
               $query->execute();
         }catch (PDOException $e) {

         }
         if ($query->rowCount() == 1) {
                  $animal = $query->fetch(PDO::FETCH_ASSOC);
                 $this->animal= $animal;
         }
  }

  • Voto 1

scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
t0ze

Pronto, resolvido, já estou desbloqueado de novo :)

Já tinha experimentado chamar em global, mas fora da classe no ficheiro /classes/animal.php ...

Obrigado pela ajuda scorch !

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Cada vez que alguém usa uma variável global, um GNR dá um pontapé num porco. Sê amigo dos recos, não uses variáveis globais.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

nao uses variaveis globais, mais vale implementar um singleton


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

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.