Object vullen PDO

Overzicht

Sponsored by: Vacatures door Monsterboard

Nicoow Unknown

Nicoow Unknown

13/04/2009 12:53:00
Anchor link
Hallo allen,
Voor de genen die misschien mijn vorige topic ok hebben gelezen, dan weten die dat k met een inlog systeem bezig ben in OOP.

En nu zat ik eens te kijken naar PDO, en die heeft ook een PDO::FETCH_OBJ.
Nu vroeg k mij dus af,
Zou k van dat object direct mijn user kunnen maken, (als k dus de gegevens goed ophaal, en de namen hetzelfde zijn.)
Heeft iemand hier ervaring mee, of ben k de enige die met z'n stom idee op kan komen?

k bedoel dus iets als dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class User {
private $naam;
private $email;
private $woonplaats;
}


$mysql = new PDO('mysql:host=localhost;dbname=test' , 'root' , '' , array(     PDO::ATTR_PERSISTENT => true ) );


    $sql = $mysql->prepare('SELECT naam, email, woonplaats FROM pdo_test WHERE id=?');
    $sql->bindParam( 1 , $_SESSION['id'] );
    $sql->execute();

    $user = new User();
    $user = $sql->fetch( PDO::FETCH_OBJ );
?>


Weet overigens ook iemand wat
array( PDO::ATTR_PERSISTENT => true)
mag betekenen?
 
PHP hulp

PHP hulp

20/07/2019 08:12:22
 
GaMer B

GaMer B

13/04/2009 12:58:00
Anchor link
nico schreef op 13.04.2009 12:53:
Weet overigens ook iemand wat
array( PDO::ATTR_PERSISTENT => true)
mag betekenen?


Uitleg (EN)
 
Nicoow Unknown

Nicoow Unknown

13/04/2009 13:00:00
Anchor link
ok,, dus gewoon een connectie die maar door blijft gaan (blijft draaien)
 
Joren de Wit

Joren de Wit

13/04/2009 13:20:00
Anchor link
Wat betreft je eerste vraag zou ik eens kijken naar de fetchObject() method. Daarmee is het inderdaad mogelijk om direct het gewenste object aan te maken met de uit de database opgehaalde gegevens...
 
Nicoow Unknown

Nicoow Unknown

13/04/2009 13:25:00
Anchor link
ThnQ Blanche,
En er staat dan bij de 2e constructor (degene met 2 variable dus) een array met de elements erin,
Is een element dan het gegeven dat je uit de database haalt?
 
Joren de Wit

Joren de Wit

13/04/2009 13:30:00
Anchor link
Nee, dat is een array met argumenten die jij zelf invult en die mee gegeven zullen worden aan de constructor. Als het goed is zijn de gegevens uit de database als property binnen de klasse beschikbaar.

Maar goed, ik zou zeggen probeer het eens uit. Maak op die manier eens een object aan en print dat eens...
 
Nicoow Unknown

Nicoow Unknown

13/04/2009 14:33:00
Anchor link
Het wil niet echt lukken,
K moet in die array de argumenten meegeven, maar ik heb geen idee hoe k die moet aanroepen.
of moet k hem eerst gaan fetchen, en dat k dan pas de argumenten mee kunnen geven.
k ga ervan uit dat ze er wel hebben over nagedacht, en dat k dus gewoon iets als $sql->username kan gaan gebruiken.
Iemand enig idee?
 
Joren de Wit

Joren de Wit

13/04/2009 14:38:00
Anchor link
Nee, zo moet je het niet zien. Als jij de gegevens uit de database in een constructor wilt gebruiken in PHP, zul je ze inderdaad eerst moeten fetchen.

De method fetchObject() is echt bedoeld om een object dat je uit de database haalt, direct in PHP te kunnen gebruiken. De gegevens die je dan uit de database haalt, vormen de properties van het betreffende object.
 
Nicoow Unknown

Nicoow Unknown

13/04/2009 14:48:00
Anchor link
hmm,,
K begrijp er even vrij weinig van,
Misschien kan je me helpen als je een voorbeeldje ziet =P
Hier komt wat k nu heb:
//User_Store

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

/**
 * @author Nico Kaag
 * @copyright 2009
 */

error_reporting(E_ALL);
include 'user.php';
class User_Store
{
    private $mysql;
    public function __construct($host, $database, $username, $password)
    {

        $this->mysql = new PDO('mysql:host='. $host .';dbname='. $database , $username, $password, array(PDO::ATTR_PERSISTENT => true));
    }

    public function get($id)
    {

        $sql = $this->mysql->prepare('SELECT id, username, email FROM users WHERE id=?');
        $sql->bindParam( 1 , $id );
        $sql->execute();
        $user = $sql->fetchObject("User");
        return $user;
    }
}


?>


//User

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php

/**
 * @author Nico Kaag
 * @copyright 2009
 */

error_reporting(E_ALL);

class User
{
    private $id;
    private $username;
    private $email;
    
    public function __construct($id, $username, $email)
    {

        $this->id = $id;
        $this->username = $username;
        $this->email = $email;
    }

    
    public function printUser()
    {

        echo 'ID: '. $this->id;
        echo '<br />';
        echo 'Username: '. $this->username;
        echo '<br />';
        echo 'Email: '. $this->email;
    }
}


?>


//De test
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

/**
 * @author Nico Kaag
 * @copyright 2009
 */

error_reporting(E_ALL);

include 'user_store.php';

$userStore = new User_Store('localhost', 'tuinhoeve_site', 'root', '');
$user = $userStore->get(1);
$user->printUser();

?>
 
Joren de Wit

Joren de Wit

13/04/2009 15:02:00
Anchor link
Als je het op die manier wilt aanpakken, gebruik je dus niet de constructor van je User klasse om dat object aan te maken. Dat doe je nu middels de fetchObject() method en daarom moet je de constructor leeg laten (of in ieder niet de gegevens vereisen die uit de database komen).

Verder zul je er in je printUser() method op moeten letten dat de properties van het User object genaamd zijn naar de kolommen die je in je SELECT query opgehaald hebt. Een goede afstemming tussen database en PHP code is hier dus van groot belang en de vraag is of zo'n verweving altijd even handig is.
 
- Ariën -
Beheerder

- Ariën -

26/06/2019 17:57:07
Anchor link
Spamkickslotje
 
 

Dit topic is gesloten.



Overzicht

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.