Avatar billede palito Nybegynder
04. september 2008 - 20:12 Der er 14 kommentarer

Tjek om en forbindelse til en database eksisterer

Jeg har nedenstående klasse, og jeg vil gerne kalde min funktion "getByID()", og i denne funktion skal den tjekke om der er oprettet en database-forbindelse, og hvis der er, så skal den hente noget data fra en tabel udfra det givne id, hvis ikke der er oprettet en database-forbindelse, så skal den returnere false.

<?php
class Account extends Model
{
    public function getByID( $id )
    {
        return true;
    }
}
?>
Avatar billede jakobdo Ekspert
05. september 2008 - 06:59 #1
Du har vel en db klasse eller noget ?
Avatar billede jakobdo Ekspert
05. september 2008 - 07:02 #2
Hvis du bare laver:

$link = mysql_connect();
Kan du jo lave et tjek på:

if($link == false){
echo 'Ikke connected';
}

Hvis du har en DB klasse, kan du jo lave:

function connect(){
...
$this->connected = true;
...
}

Og så tjekke $DB->connected, inden du laver noget videre.
Avatar billede palito Nybegynder
05. september 2008 - 08:01 #3
Vil du ikke prøve at sætte det ind i den klasse jeg har vist ovenfor?
Avatar billede jakobdo Ekspert
05. september 2008 - 08:05 #4
Tjo, men det kræver jo at jeg ved hvordan din DB klasse er opbygget.
Avatar billede palito Nybegynder
05. september 2008 - 08:11 #5
Jeg har ingen DB klasse. Hvilke metoder skal der være i sådan en? Det kan ikke lade sig gøre at bruge metoden __construct(), desværre. Derfor har jeg et problem :/
Avatar billede jakobdo Ekspert
05. september 2008 - 08:20 #6
Men er spørgsmålet så hvordan du forbinder til DB eller ?
Avatar billede palito Nybegynder
05. september 2008 - 13:52 #7
Nej, hvordan min "model" (klassen Account) skal se ud, hvis den skal henten noget data ud fra en database - hvilket den jo ikke kan gøre hvis ikke der er oprettet forbindelse. Og forbindelsen skal oprettes i klassen!

Hvis jeg kunne bruge __construct, så ville jeg blot lave det således:

class Account {
public function __construct() {
  $this->db = new PDO( ... );
}

public function getByID($id) {
  $this->db->query( .. );
}
}

Men det kan jo desværre ikke lade sig gøre, så jeg søger et alternativ.
Jeg er ikke interesseret i at oprette forbindelse til databasen, hvis ikke det er nødvendigt at hente noget fra den, så forbindelsen skal altså oprettes i getByID()
Avatar billede dkfire Nybegynder
05. september 2008 - 15:01 #8
Hvis du ikke kan bruge __construct grundet at du kører php4, så kan du lave en funktion med samme navn som din klasse. Sådan en funktion virker på samme måde som __construct.

class Account extends Model {
public function Account() {
  $this->db = new PDO( ... );
}

public function getByID($id) {
  $this->db->query( .. );
}
}

Hvis det skyldes at den klasse som din model bygger på allerede har en __construct kan du gøre noget ala:
class Account {
public function __construct() {
  parent::__construct();
  $this->db = new PDO( ... );
}

public function getByID($id) {
  $this->db->query( .. );
}
}
Avatar billede palito Nybegynder
05. september 2008 - 15:25 #9
grunden til jeg ikke kan bruge __construct er, at jeg ikke opretter en instans af klassen, men bare kalder metoderne direkte.
- ellers tak dkfire!
Avatar billede dkfire Nybegynder
05. september 2008 - 16:55 #10
Så kunne du måske gøre noget ala:
class Account {
   
    static $instance;
   
    public function __construct() {
          $this->db = new PDO( ... );
    }

    public function getByID($id) {
        if(!is_object($this->instance))
            $this->instance = new self;
        $this->db->query( .. );
    }
}

Det har jeg dog ikke lige testet.
Avatar billede palito Nybegynder
08. september 2008 - 14:05 #11
dkfire: det er noget alá det jge ønsker, jeg synes bare ikke så godt om det med at kalde klassen sådan. så kan jeg ikke bare undgå __construct, men alligevel bruge noget af princippet i dit eksempel?
Avatar billede dkfire Nybegynder
08. september 2008 - 18:52 #12
Nu ved jeg jo ikke lige hvad du har planer om at bruge, så det kan jeg ikke svare på. Jeg kan dog heller ikke forstå hvorfor du ikke vil have en __construct ??
Avatar billede jakobdo Ekspert
08. september 2008 - 20:31 #13
Jeg tror palito vil opnå følgende:

<?php
$noget->goer_noget();
?>

Og altså ikke:
<?php
$noget = new noget();
$noget-> goer_noget();
?>

Men jeg forstår dog heller ikke problemet. :o)
Avatar billede palito Nybegynder
09. september 2008 - 15:10 #14
Jeg vil bare køre funktionerne således: "$data = Account::getByID(2);"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester