Na hele lange tijd ben ik weer eens begonnen met PHP/MySQL. Tot mijn verbazing is mysql_ uit PHP verwijderd en vervangen door msqli_ en PDO.
Na wat onderzoek te doen ben ik erachter gekomen dat PDO de voorkeur geniet, dus heb ik mij daar enigszins ingelezen.
Ik ben bezig een website te maken die multilanguage moet zijn. Om PDO een beetje onder de knie te krijgen, probeer ik delen van die website in een testscriptje te testen.
Ik heb code gemaakt voor een lijstje met beschikbare talen, en een functie om de juiste tekst te krijgen die bij de taal hoort.
Code voor lijstje
Nu dan de functie voor het ophalen van een tekst (Content) die bij een taal hoort (LangID) en afgekort is in de HTML template met Short, in de tabel Text
Als ik de tekst die in de tabel Text onder kolom Short staat aangemeld met lorum en LangID = 1, dan doe ik het volgende:
Tot zover werkt dit allemaal en ben ik er blij mee dat ik PDO redelijk onder de knie krijg.
Echter, mijn gevoel zegt dat het performance wise niet efficient gaat werken als er voor elke snippet aan tekst een nieuwe DB connectie moet worden gemaakt. Aan de andere kant, de PDO variabele global maken lijkt me ook niet de juiste weg. Is het nu vereist dat er voor elke database call, een nieuwe connectie moet worden gemaakt?
Ik kan op internet heel veel vinden, maar niet iets waarin staat of dit nou de juiste manier is of niet. Overigens, is dit wel veel ingewikkelder dan de oude mysql_ functies, naar mijn mening. Maar de security schijnt beter te zijn.
Na wat onderzoek te doen ben ik erachter gekomen dat PDO de voorkeur geniet, dus heb ik mij daar enigszins ingelezen.
Ik ben bezig een website te maken die multilanguage moet zijn. Om PDO een beetje onder de knie te krijgen, probeer ik delen van die website in een testscriptje te testen.
Ik heb code gemaakt voor een lijstje met beschikbare talen, en een functie om de juiste tekst te krijgen die bij de taal hoort.
Code voor lijstje
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| $dbh = new pdo("mysql:host=localhost;port=8889;dbname=abc", "root", "root", array ( PDO::ATTR_PERSISTENT => true )); $sth = $dbh->prepare("SELECT * FROM Languages"); $sth->execute(); $result = $sth->fetchAll(); if ($result != false) { $i = 0; foreach ($result as $row) { echo "<img src=\"assets/img/flags/" . $row['Flag'] . "\" style=\"max-width:100%; height:10px;\" title=\"". $row['LangLong'] . "\"/> " . strtoupper($row['LangShort']); if(++$i === count($result)){ echo " "; }else{ echo " | "; } } } |
Nu dan de functie voor het ophalen van een tekst (Content) die bij een taal hoort (LangID) en afgekort is in de HTML template met Short, in de tabel Text
PHP:
1
2
3
4
5
6
7
8
| function get_text_short($short, $langid) { $dbh = new pdo("mysql:host=localhost;port=8889;dbname=abc", "root", "root"); $sth = $dbh->prepare("SELECT Content FROM Text WHERE LangID = :langid AND Short= :short"); $sth->bindParam(':langid', $langid); $sth->bindParam(':short', $short); $sth->execute(); return $sth->fetchColumn(); } |
Als ik de tekst die in de tabel Text onder kolom Short staat aangemeld met lorum en LangID = 1, dan doe ik het volgende:
PHP:
1
| echo(get_text_short("lorum", 1)); |
Tot zover werkt dit allemaal en ben ik er blij mee dat ik PDO redelijk onder de knie krijg.
Echter, mijn gevoel zegt dat het performance wise niet efficient gaat werken als er voor elke snippet aan tekst een nieuwe DB connectie moet worden gemaakt. Aan de andere kant, de PDO variabele global maken lijkt me ook niet de juiste weg. Is het nu vereist dat er voor elke database call, een nieuwe connectie moet worden gemaakt?
Ik kan op internet heel veel vinden, maar niet iets waarin staat of dit nou de juiste manier is of niet. Overigens, is dit wel veel ingewikkelder dan de oude mysql_ functies, naar mijn mening. Maar de security schijnt beter te zijn.
[ Voor 3% gewijzigd door P.B. op 18-12-2017 20:55 ]