Object vullen PDO
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:
Weet overigens ook iemand wat
array( PDO::ATTR_PERSISTENT => true)
mag betekenen?
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 );
?>
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?
ok,, dus gewoon een connectie die maar door blijft gaan (blijft draaien)
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...
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?
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?
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...
Maar goed, ik zou zeggen probeer het eens uit. Maak op die manier eens een object aan en print dat eens...
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?
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?
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.
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.
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
//User
//De test
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)
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
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;
}
}
?>
/**
* @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)
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
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;
}
}
?>
/**
* @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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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();
?>
/**
* @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();
?>
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.
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.
Spamkickslotje



