Il y a des cas où on aimerai se simplifier la vie en n’ayant pas à réécrire 50 fois (si ce n’est plus, adepte de la normalisation de db, tu t’es reconnu) au risque de faire une erreur. Quoi de mieux qu’un bout de code commenté pour comprendre comment faire…. C’est là qu’arrive la requête paramétrée !
Cette méthode permet des gains de performances non négligeables, surtout pour les applications lourdes et/ou à fort trafic (ou sur la poubelle qui vous sert de serveur), elle offre également un petit plus sécurité comme pour les injection SQL par exemple.
Un premier exemple court, de l’insertion :
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 |
<?php // Created by Julien VIDA on 2012-07-17. // Copyright 2012 Julien VIDA. All rights reserved. $pdo = new PDO("mysql:host=". DB_HOST .";dbname=" . DB_NAME, DB_USER, DB_PASS); $pdo -> SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO site (id, name, url) VALUES (NULL, ?, ?);"; $add_site = $pdo -> prepare($sql); $toAdd = array('My Site', 'http://b4mbi.fr/'); $add_site -> execute($toAdd); $add_site -> execute(array('my blog', 'http://b4mbi.fr/blog/')); // OU $sql = "INSERT INTO site (id, name, url) VALUES (NULL, :name, :url);"; $add_site = $pdo -> prepare($sql); $toAdd = array(':name' => 'My Site',':url' => 'http://b4mbi.fr/'); $add_site -> execute($toAdd); $add_site -> execute(array( ':name' => 'my blog', ':url' => 'http://b4mbi.fr/blog/')); unset($pdo, $value, $result, $id_skipped, $sql, $upd); ?> |
Le code suivant récupère le champ type
et le converti en valeur numérique. Ce bloc est prévu pour une grosse base de données, c’est pourquoi, il n’y a pas de switch mais une chaîne de if.
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
<?php // Created by Julien VIDA on 2012-07-17. // Copyright 2012 Julien VIDA. All rights reserved. $pdo = new PDO("mysql:host=". DB_HOST .";dbname=" . DB_NAME, DB_USER, DB_PASS); $pdo -> SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo -> beginTransaction(); $sql = "SELECT `id`, `type` FROM `table` ORDER BY `type` ASC"; $result = $pdo -> query($sql); # Store query $upd = "UPDATE `data_base`.`table` SET `type` = ? WHERE `id` = ?"; # Preparing query $exec = $pdo -> prepare($upd); $pdo -> beginTransaction(); try { # Reading the entries foreach ($result as $entry => $data) { # Init && Reset tester $value=NULL; # Tests & assignment if needed if ($data['type'] == 'type 1') { $value = 1; } elseif ($data['type'] == 'Elle met ') { $value = 2; } elseif ($data['type'] == 'la cassette ') { $value = 3; } elseif ($data['type'] == 'dans la tête ') { $value = 4; } elseif ($data['type'] == 'du chat ') { $value = 5; } else { # Store skipped ids $id_skipped[] = $data['id']; } # if my tester is not null, it updates if (!is_null($value)) { $exec -> execute( array($value, $data['id']) ); } } } catch (PDOException $e) { echo '<pre>'; $pdo->rollback(); print_r($e); echo '</pre>'; } # Display skipped ids print_r('<pre>' . $id_skipped . '</pre>'); unset($pdo, $value, $result, $id_skipped, $sql, $upd); ?> |
Spot on with this write-up, I really think this website wants far more consideration. I’ll probably be again to learn way more, thanks for that info.