van mysqli naar PDO

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Midas Aversteeg

Midas Aversteeg

17/10/2016 12:55:01
Quote Anchor link
Hey ben ik weer,

Van mijn stagebegeleider moet ik switchen van mysqli naar PDO omdat ze dat hier al gebruiken en hij niet alleen voor mijn projectje apart wat anders gaat gebruiken. Alleen heb ik geen flauw idee hoe dat moet. Misschien als ik een voorbeeld zie dat ik de rest wel zelf kan, dus hier heb ik database.php nog met mysqli. Hoe zou dit er uit moeten zien met PDO?

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
<?php

    if(!defined('Include')){ //Prevent direct access
    header("Location: http://www.voorbeeld.nl/");
    }

    else{
    $db_host="localhost";
    $db_name="databasenaam";
    $username="root";
    $password="";
    $db_con=mysqli_connect($db_host,$username,$password,$db_name);

    // Connection
    mysqli_connect($db_host,$username,$password,$db_name);

    // Check connection
    if (mysqli_connect_errno())
    {

        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    }

?>
 
PHP hulp

PHP hulp

24/12/2024 17:47:48
 
- Ariën  -
Beheerder

- Ariën -

17/10/2016 12:57:07
Quote Anchor link
Wat heb je al gevonden op internet? En wat heb je al geprobeerd?
Er zijn hele tutorials over te vinden.
 
Midas Aversteeg

Midas Aversteeg

17/10/2016 13:05:44
Quote Anchor link
Ben nu bezig met het doorlezen van de "Gebruik van de PDO extensie" tutorial van deze site ;)

Toevoeging op 17/10/2016 13:21:08:

naar mijn bevindingen lijkt het alsof

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
18
19
20
21
22
<?php

    if(!defined('Include')){ //Prevent direct access
    header("Location: http://www.voorbeeld.nl/");
    }

    else{
    $db_host="localhost";
    $db_name="databasenaam";
    $username="root";
    $password="";
    $db_con=mysqli_connect($db_host,$username,$password,$db_name);

    // Connection
    mysqli_connect($db_host,$username,$password,$db_name);

    // Check connection
    if (mysqli_connect_errno())
    {

        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    }

?>



er uit komt te zien als dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
    // Maken van verbinding
    $db = new PDO('mysql:host=localhost;dbname=databasenaam', 'root', '');

    // Sluiten van verbinding
    $db = NULL;
?>


is dat correct of zie ik het nou verkeerd
 
Thomas van den Heuvel

Thomas van den Heuvel

17/10/2016 14:23:13
Quote Anchor link
Quote:
Van mijn stagebegeleider moet ik switchen van mysqli naar PDO omdat ze dat hier al gebruiken en hij niet alleen voor mijn projectje apart wat anders gaat gebruiken

Wait, what. Gebruiken ze dan iets anders dan MySQL in die toko? En wat is dan je motivatie om dat te gebruiken als het om een (standalone?) projectje gaat? "Omdat we dat hier al gebruiken" lijkt mij geen fantastische motivatie, tenzij je je aan stricte codeconventies moet houden maar volgens mij is dat hier niet aan de orde? Als zij niet kunnen motiveren waarom het PDO *moet* zijn en jij wel gegronde redenen hebt om mysqli te gebruiken - lekker zo laten.

Over de opzet van de code kun je natuurlijk twisten... :p

Het bovenstaande (de PDO variant) zal in principe wel werken denk ik, en het is misschien wel interessant om te zien of precies die oplossing geaccepteerd wordt. Dat zou namelijk nogal hilarisch zijn omdat ze je dan enerzijds een "correcte" werkwijze door de strot proberen te duwen, terwijl je anderzijds met root naar je database connect (wat volgens mij een redelijke doodzonde is) en je tevens geen character encoding selecteert bij het maken van een verbinding (wat op termijn voor allerlei vervelende problemen kan zorgen).

Volgens mij komt het ook steeds vaker voor dat mensen elkaar simpelweg na-papegaaien dat het PDO moet zijn, zonder dat ze nu eigenlijk weten waarom of dit uberhaupt kunnen motiveren...

EDIT het selecteren van een database driver/extensie is een ontwerpbeslissing en niet simpelweg een kwestie van syntactic sugar.
Gewijzigd op 17/10/2016 14:27:00 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

17/10/2016 19:23:11
Quote Anchor link
Thomas, heb je al eens gedacht aan dat stagiaires tijdelijk zijn? Mogelijk wil het bedrijf de source daarna in eigen beheer hebben, en zijn ze daar gewoon gewend om met PDO om te gaan. En verder is het voor de topicstarter ook vast en zeker een uitdaging om eens iets nieuws te leren ontdekken.
 
Pg Vincent

Pg Vincent

17/10/2016 20:47:35
Quote Anchor link
Quote:
Volgens mij komt het ook steeds vaker voor dat mensen elkaar simpelweg na-papegaaien dat het PDO moet zijn, zonder dat ze nu eigenlijk weten waarom of dit uberhaupt kunnen motiveren...


Het komt ook veel voor dat PHP programmeurs hun eigen idee hebben van wat "goed" is, en alles wat niet aan hun idee voldoet verslijten als onzin.

In dit geval is het simpel; het bedrijf gebruikt PDO, dus doet de temp dat ook. Hij zal ook wel een coding standard moeten aanhouden en nog veel meer dingen die volstrekt normaal zijn in bedrijven waar meerdere programmeurs samenwerken.
 
- Ariën  -
Beheerder

- Ariën -

17/10/2016 20:56:17
Quote Anchor link
Binnen bedrijven wordt vaak een coding standaard gehanteerd. Waarom zou iemand daarvan afwijken?
Ik kan me indenken dat een stagiaire daar dan ook aan moet voldoen. En voor een studieproject mag een bedrijf toch eisen stellen? Dat is gewoon realiteit in de IT-wereld.
Gewijzigd op 17/10/2016 20:57:56 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

18/10/2016 13:33:20
Quote Anchor link
Quote:
Mogelijk wil het bedrijf de source daarna in eigen beheer hebben, en zijn ze daar gewoon gewend om met PDO om te gaan.

Afgaande op het bovenstaande codevoorbeeld lijkt dit een standalone script. Het lijkt mij als bedrijf geen goede strategie om op deze manier allerlei eilandjes te creëren.

Quote:
gewend

Precies mijn punt.

Quote:
Het komt ook veel voor dat PHP programmeurs hun eigen idee hebben van wat "goed" is, en alles wat niet aan hun idee voldoet verslijten als onzin.

Het maakt niet uit wat je doet, zolang je maar kunt motiveren waarom je iets doet. Waarom zou je PDO gebruiken? Sterker nog: why not go all in? Op het moment dat je PDO gaat gebruiken is dan het gebruiken van een database abstractielaag ook een verplichte vervolgstap? Ik bedoel, waarom introduceer je dit soort complexiteit als je er verder weinig tot niets van gebruikt? Een verkeerd gebruik van PDO is net zo funest als een verkeerd gebruik van een andere oplossing.

Quote:
coding standaard

Je gaat mij niet vertellen dat je op deze manier een database-connectie opzet met alle credentials in hetzelfde script. Op het moment dat je coding standaarden gebruikt ben je meestal in grotere systemen of pakketten bezig. De bovenstaande code heeft geenszins deze uitstraling.

Los van dit alles, ik zeg helemaal niet dat dit of dat gebruikt moet worden, ik plaats enkel vraagtekens bij de aanpak waarbij per se van X gebruik gemaakt dient te worden. Moet je dit zomaar blind volgen? Nee. Zou je je af kunnen/mogen vragen waarom je ergens voor kiest? Of op zijn minst inzage van motivering kunnen krijgen? Daar kun je ook iets van leren. Zelfs als het antwoord is dat iemand er nooit echt over nagedacht heeft.

Toch fijn dat ik meteen weer van die prekerige antwoorden krijg op het moment dat ik iemand uitdaag om eens na te denken over wat je nu eigenlijk aan het doen bent.
Gewijzigd op 18/10/2016 13:34:41 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

18/10/2016 13:45:52
Quote Anchor link
Leuk hé, dat speculeren. Maar kunnen we ons liever richten op zijn probleem, of wachten tot hij nader nog wat op te merken heeft?
 
Thomas van den Heuvel

Thomas van den Heuvel

18/10/2016 14:04:53
Quote Anchor link
@topicstarter
- verdiep je in de MySQL / andere specifieke driver van PDO, daar zit het venijn en de leercurve
- maak op zijn minst gebruik van een try-catch constructie anders kan het maken van een connectie (uiteindelijk) resulteren in een fatal error die mogelijk je connectie-parameters prijsgeeft
- stel bij het maken van een verbinding expliciet de correcte character encoding in zodat er geen ruimte voor eigen (en mogelijk verkeerde) interpretatie is

@ariën
Leuke bliksemafleider, alle pijlen op het oorspronkelijke probleem zodat je de confrontatie niet meer aan hoeft te gaan? Lekker makkelijk.
 
- Ariën  -
Beheerder

- Ariën -

18/10/2016 14:35:27
Quote Anchor link
Dat is speculeren, maar genoeg offtopic nu, Thomas.Anders horen we het wel van de topicstarter!
Gewijzigd op 18/10/2016 14:50:32 door - Ariën -
 
Pg Vincent

Pg Vincent

18/10/2016 15:02:18
Quote Anchor link
Quote:
is dat correct of zie ik het nou verkeerd


Zo'n beetje wel ja, volg ook de handleiding voor meer voorbeelden, of vraag je opdrachtgever om voorbeeldcode van hoe zij het graag zien. uiteindelijk moet je voldoen aan hun wensen, dus ligt het voor de hand dat zij ook voorbeelden hebben van hoe zij het doen (beter goed gejat dan slecht verzonnen).


@Thomas: ik zou zeggen: open een topic in de koffiehoek. Wat je zegt is in grote lijnen wel iets wat iedereen moet weten, maar er zitten *heel* veel nuances aan en het belangrijkst hier is dat het niet relevant is voor het topic.
 
Ozzie PHP

Ozzie PHP

18/10/2016 15:05:36
Quote Anchor link
Offtopic:

@Thomas:

Je advies is absoluut goedbedoeld, maar soms kun je (onbewust) enigszins "pusherig" overkomen. En dit bedoel ik als positieve feedback ;-) De jongen geeft duidelijk aan dat hij stage loopt en dan kan het gebeuren, om wat voor reden dan ook, dat een bedrijf om een bepaalde aanpak/techniek/handelswijze vraagt. Daar is niks mis mee, evenmin als met de keuze voor PDO. Dat jij van die keuze graag een onderbouwing wilt zien, is in dit geval totaal irrelevant omdat het niet jouw opdrachtgever betreft. En deze jongen is iemand die het nog moet leren, dus om te gaan vertellen hoe hij z'n connectie moet opzetten en of hij wel of niet met exceptions moet werken, lijkt me op dit moment een stap te ver gaan. Ik snap je gedrevenheid en je enthousiasme ... maar alles op z'n tijd ;-) Ofwel ... relaaaaaax :-)

 
Midas Aversteeg

Midas Aversteeg

20/10/2016 08:32:20
Quote Anchor link
hey jongens,

was ziek geweest de afgelopen dagen dus heb het niet echt gevolgd, zie nu dat het een beetje off-topic ging, maar is niet erg ^^

was er zelf al wel uitgekomen, en het een en ander besproken.

toch bedankt voor de informatie/tips!
 



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.