Database connection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Albert de Wit

Albert de Wit

03/05/2012 12:40:42
Quote Anchor link
Ik ben aan het experimenteren met database connecties en OOP. Ik heb al succesvol een connectie gemaakt en een database geselecteerd maar krijg er niks in. Dat komt waarschijnlijk omdat ik de connect en select functies niet oproep maar ik heb ook geen idee hoe dat moet. Kan iemand mij helpen en vertellen hoe dit moet?

Dit is de database connection en database selection. Ik wil in een andere functie een query zetten alleen dan maakt hij dus geen connectie met de database.

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

class Connection
{
  public function MysqlConnect($host, $user, $pass)
  {

    $this->connection = mysql_connect($host,$user,$pass);
    if ($this->connection)
    {

      return 'Connected';
    }

    else
    {
      return 'Sorry, connection to the database has failed.';
    }
  }


  public function MysqlSelect($database)
  {

    $this->selection = mysql_select_db($database);
    if ($this->selection)
    {

      return 'Connected';
    }

    else
    {
      return 'Sorry, connection to the database has failed.';
    }
  }
}


?>
 
PHP hulp

PHP hulp

22/12/2024 11:04:54
 
Wouter J

Wouter J

03/05/2012 12:42:46
Quote Anchor link
En hoe gebruik je het, dus even je procedurele code? Want dit is nu dezelfde code als in je vorige topic.
 
Albert de Wit

Albert de Wit

03/05/2012 12:43:41
Quote Anchor link
dat is nou net wat ik vraag... hoe gebruik ik het?
 
Gerhard l

gerhard l

03/05/2012 12:46:22
Quote Anchor link
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
33
34
35
36
37
38
39
40
<?php

class Connection
{
  private $connection;
  private $selection;

  public function MysqlConnect($host, $user, $pass)
  {

    $this->connection = mysql_connect($host,$user,$pass);
    if ($this->connection)
    {

      return 'Connected';
    }

    else
    {
      return 'Sorry, connection to the database has failed.';
    }
  }


  public function MysqlSelect($database)
  {

    $this->selection = mysql_select_db($database);
    if ($this->selection)
    {

      return 'Connected';
    }

    else
    {
      return 'Sorry, connection to the database has failed.';
    }
  }
}


// Zo zou je hem kunnen gebruiken, naamgeving is niet helemaal duidelijk

$conn = new Connection;
$conn->MysqlConnect('host','user','pass');
$conn->MysqlSelect('db');
?>
Gewijzigd op 03/05/2012 12:46:42 door gerhard l
 
Wouter J

Wouter J

03/05/2012 12:47:43
Quote Anchor link
Dus je hebt iets gemaakt maar weet niet hoe je het moet gebruiken? Dan ben je nog niet in de OOP stemming. Bij OOP moet je eigenlijk eerst nagaan hoe je het wilt gebruiken en vanuit dat punt je klasse opbouwen.
 
Chris PHP

Chris PHP

03/05/2012 12:49:23
Quote Anchor link
@Gerard,

Als je wat Albert geschreven heeft zo kunt gebruiken, is het dan niet slimmer om gewoon PDO te gebruiken? Daar zit heel deze functionaliteit al in en meer?

Dan kan hij dat hele class verhaal laten vervallen en gewoon gebruiken wat in PHP zit. Voor zover ik weet is dit ontworpen voor OOP

Corrigeer me even als ik er naast zit.
Gewijzigd op 03/05/2012 12:51:21 door Chris PHP
 
Wouter J

Wouter J

03/05/2012 12:51:38
Quote Anchor link
Chris, ja wel als hij op deze manier doorgaat. Als Albert speciale functies gaat schrijven voor objecten zodat je makkelijk objecten kan gebruiken en het ombouwt tot een DataMapper (of iets wat daar op lijkt) dan heb je er veel aan. In dit geval heb je er eigenlijk bijna niks aan, je bent min of meer een bestaande verouderde mysql extensie aan het omzetten in een klasse vorm die eigenlijk niks speciaals bied.
 
Gerhard l

gerhard l

03/05/2012 12:52:30
Quote Anchor link
Ik werk wel met PDO in classes en die heeft voor mij genoeg functionaliteiten, maar ik beantwoord alleen zijn vraag ;)
 
Albert de Wit

Albert de Wit

03/05/2012 12:53:53
Quote Anchor link
Ik ben het Flat PHP gewend... eerst een database connection maken, daarna een database selecteren en dan een query schrijven. Dat doe ik nu in dezelfde volgorde. Ik heb de verbinding getest maar hoe gebruik ik hem in een function die de query uitvoert?
 
Chris PHP

Chris PHP

03/05/2012 13:00:10
Quote Anchor link
Dus alles samengepakt is het slimmer om albert zijn classe te laten vergeten en een helemaal op OOP gebaseerde PDO gebruiken?

Ik vind het altijd zonde om dingen opnieuw te maken terwijl PHP het al bied.
Het was gewoon een observatie van mij aangezien Gerard liet zien hoe je Albert's classe gebruikt, ging bij mij gelijk het lampje van PDO branden.

Mijn advies is, breek je hoofd niet over deze classe (vooral omdat je net begint met OOP!) en gebruik PDO.
 
Albert de Wit

Albert de Wit

03/05/2012 13:00:52
Quote Anchor link
zou dit kunnen werken?

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
<?php
require_once 'DatabaseHandler.php';
require_once 'Requirements.php';

class MysqlQuery extends Connection
{
  function
QueryRegistreer($tabel, $email, $wachtwoord)
  {

    $conn = new Connection;
    $conn->MysqlConnect('localhost','root','');
    $conn->MysqlSelect('test');  

    mysql_query("INSERT INTO ".$tabel."(id,email,wachtwoord) VALUES ('','$email','$wachtwoord')");
  }
}

?>


Toevoeging op 03/05/2012 13:02:49:

ah hij doet et! ik heb hem al :D

allemaal bedankt voor de hulp!
 
Chris PHP

Chris PHP

03/05/2012 13:03:31
Quote Anchor link
Uhm... als je alleen gebruikers blijft aanmaken miet die INSERT wel. Want je tabel is nu variabel (voor je gebruikers), en je values zijn static of tewel vaste waardes id, email en wachtwoord.

Tenzij je de gegevens ook in andere tabellen wilt plaatsen, heeft dit niet zoveel nut lijkt me.
 
Albert de Wit

Albert de Wit

03/05/2012 13:05:19
Quote Anchor link
ik ben slechts aan het experimenteren. Als waardes aangepast moeten worden doe ik hetzelfde met een UPDATE query
 
Chris PHP

Chris PHP

03/05/2012 13:08:46
Quote Anchor link
Nee ik bedoelde echter, dat je nu vaste values hebt id, email en wachtwoord. Maar je hebt de tabel variabel gemaakt. Ik ga ervanuit dat je maar 1 tabel hebt voor je gebruikers toch?

Waarom zou je dan de tabel in je query variabel maken? Hier zou je dan toch ook gewoon de tabelnaam van de gebruikers tabel neerzetten bijv users?

Het werkt uiteraard wel, ik was alleen benieuwt waarom je het tabel variabel hebt gemaakt.
Gewijzigd op 03/05/2012 13:09:21 door Chris PHP
 
Albert de Wit

Albert de Wit

03/05/2012 13:11:43
Quote Anchor link
Ik was eerst vooral bezig om een variabele query te maken die niet alleen gebruikers in de database zou zetten.
 
Chris PHP

Chris PHP

03/05/2012 13:14:53
Quote Anchor link
Aaaah ok ik snap het ;)

Als tip geef ik je wel mee om eens een blik te werpen op het PDO verhaal. Het zal een hoop duidelijk maken en er staan wat leuke voorbeelden.
 
Albert de Wit

Albert de Wit

03/05/2012 13:15:32
Quote Anchor link
ok bedankt voor *le tip ;)
 
Wouter J

Wouter J

03/05/2012 14:01:32
Quote Anchor link
Albert, wat je nu hebt is niet echt geweldig. Extends gebruik je alleen maar om een klasse uit te bouwen.
Stel je hebt een User klasse. Nu wil je een Admin klasse maken, een Admin is een user met extra functies. In dit geval gebruik je Admin extends User.

Wat jij nu doet is verkeerd. Beter zou zijn als je werkt met Dependency Injection (klinkt heel moeilijk, is het totaal niet). Om meer hierover te weten zou ik van deze tutorial hoofdstuk 1 (inleiding) en 2 (dependency injection) lezen, je mag ook verder alleen dat wordt denk ik te moeilijk voor je.

Je code zou dan zoiets worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$connection
= new Connection('localhost', 'user', 'pass');
$connection->selectDb('dbname');

$query = new Query($connection); // laad de connectie in de Query object
$query->register('INSERT INTO ....');
?>


En voor queries is het wel weer mooi te gaan werken met interfaces. Hierdoor heb je 1 grote Query object waarbij elke query type (INSERT, SELECT, DELETE, UPDATE) een eigen object wordt:
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
<?php
interface Query
{
    // basis query functies
    public function makeQuery();
    public function execute();
}

class InsertQuery implements Query
{
    public function makeQuery()
    {

        // maak insert query
    }
    public function execute()
    {

        // voor insert query uit
    }
}

class SelectQuery implements Query
{
    public function makeQuery()
    {

        // maak select query
    }
    public function execute()
    {

        // voer de query uit
    }
}

// enz.
?>


Maar ik zou ook zeer twijfelen of dit wel is wat je wilt. Wil je echt per handeling een aparte klasse maken? Het lijkt me verstandiger om 1 klasse te maken met dit alles erin. Maar nog verstandiger is het leren van PDO door bijv. deze tut.
 
Yanick  vB

Yanick vB

03/05/2012 14:08:43
Quote Anchor link
Chris, ik heb een vraagje over PDO. Het lijkt mij wel handig alleen wat is de beste manier voor foutafhandeling.

Ik kom overal iets van dit tegen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
            try {
                $pdo = new PDO('mysql:host=localhost;dbname=portfolio', 'root', '');
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch(PDOException $e) {
                echo('There is a error at linenumber: ' . $e->getLine() . '. The error is: ' . $e->getMessage());
            }


Zou er geen kortere manier zijn?

Yanick
 
Chris PHP

Chris PHP

03/05/2012 14:16:08
Quote Anchor link
@Yanick,

Dit is een vrij standaard errorhandling, veel korter zal lastig worden denk ik.
Je zou vooraf in een include wel een functie van de errorhandling kunnen maken, waardoor je het wat minder hoeft uit te typen door je site.
 
Wouter J

Wouter J

03/05/2012 14:17:10
Quote Anchor link
Wat wil je verkorten?

Als je het hebt over die Regel 3 dan zijn er 2 methoden:
1) Je kan een eigen PDO object creeëren die dit automatisch doet:
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
<?php
class MyPDO extends PDO
{
    public function __construct($dsn, $user = null, $pass = null, array $driverOptions = null)
    {

        parent::__construct($dsn, $user, $pass, $driverOptions); // roep de constructor van PDO aan
        $this->setAttribute(PDO::ATTR_ERRMOE, PDO::ERRMODE_EXCEPTION);
    }
}


// gebruik
try {
    $pdo = new MyPDO('mysql:host=localhost;dbname=someTable, 'user', 'pass');
}

catch (PDOException $e) {
    echo $e->getMessage();
}

?>


2. Je kan het meegeven in de constructor
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
try {
    $pdo = new PDO('mysql:host=localhost;dbname=someTable', 'username', 'password', array(
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
}

catch (PDOException $e) {
    echo $e->getMessage();
}

?>
 



Overzicht Reageren

 
 

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.