Object vullen PDO
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?
nico schreef op 13.04.2009 12:53:
Weet overigens ook iemand wat
array( PDO::ATTR_PERSISTENT => true)
mag betekenen?
array( PDO::ATTR_PERSISTENT => true)
mag betekenen?
Uitleg (EN)
ok,, dus gewoon een connectie die maar door blijft gaan (blijft draaien)
fetchObject() method. Daarmee is het inderdaad mogelijk om direct het gewenste object aan te maken met de uit de database opgehaalde gegevens...
Wat betreft je eerste vraag zou ik eens kijken naar de 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?
Maar goed, ik zou zeggen probeer het eens uit. Maak op die manier eens een object aan en print dat eens...
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?
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.
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();
?>
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