Jump to content

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


t0ze

Recommended Posts

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

Edited by t0ze
Link to comment
Share on other sites

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;
         }
  }
  • Vote 1

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

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.