IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Téléchargé 19 fois
Vote des utilisateurs
0 
0 
Détails
Licence : Creative Commons
Mise en ligne le 3 mars 2011
Plate-formes : Linux, Mac, Windows
Langue : Français
Référencé dans
Navigation

Faire des requêtes préparées avec l'extension mysql

L'extension Mysql commence à bien vieillir et est maintenant uniquement en correction de bug, l'extension mysqli la remplace, et PDO possède aussi un driver mysql. (plus d'info ici : http://fr2.php.net/manual/fr/mysqli.overview.php)

Avec PDO on a vite pris l'habitude de faire des requêtes préparées, de part sa simplicité, mais aussi sa couche sécuritaire. Mais il y'a malheureusement encore des résistants du mysql_* (coucou PHP 4) qui eux n'ont pas de requêtes préparées avec l'api. Et rien n'empêche d'en faire ;)

Je vous propose donc trois fonctions supplémentaires pour mysql_* :
- mysql_prepare
- mysql_execute

Et en bonus :
- mysql_fetch_all (compatible avec les mysql_fetch_*)

Adresse du projet : https://github.com/stealth35/mysql_prepare

Exemple d'utilisation :

ini_set('mysql.trace_mode', true);
mysql_connect('localhost', 'root', '');
mysql_select_db('test');
mysql_set_charset('utf8');

$stmt = mysql_prepare('SELECT * FROM `test` WHERE `id` > ? LIMIT ?');
$result = mysql_execute(array(5, 3), $stmt);

echo '';
print_r(mysql_fetch_all($result, 'object'));
echo '';
Avatar de thebarbarius
Inactif https://www.developpez.com
Le 23/02/2011 à 10:23
Sa fait beacoup de ligne par rapport a PDO ....

De plus a part en local et peut etre quelque rare hebergeur, la fonction init n'est pas autorisé...
Avatar de stealth35
Expert éminent sénior https://www.developpez.com
Le 23/02/2011 à 11:08
Citation Envoyé par thebarbarius Voir le message
Sa fait beacoup de ligne par rapport a PDO ....

De plus a part en local et peut etre quelque rare hebergeur, la fonction init n'est pas autorisé...
non ca fait même moins de ligne que PDO, pour le ini_set c'est pas obligatoire tu peux toujours utiliser les or die pas beaux (regarde a quoi correspond mysql.trace_mode...)

en PDO ca donne :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
try
{
    $driver_options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING, 
                            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
    $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '', $driver_options);
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

$stmt = $dbh->prepare('SELECT * FROM `test` WHERE `id` > ? LIMIT ?');
$stmt->bindValue(1, 5, PDO::PARAM_INT);
$stmt->bindValue(2, 3, PDO::PARAM_INT);
$stmt->execute();

echo '<pre>';
print_r($stmt->fetchAll(PDO::FETCH_OBJ));
echo '</pre>'
donc plus de ligne
Avatar de stealth35
Expert éminent sénior https://www.developpez.com
Le 03/03/2011 à 2:15
Pour ceux qui seraient intéressés par le projet voici les derniers ajouts :

  • Support du $link
  • Support du fetch group
  • Ajout des erreurs liés aux paramètres de fonction


L'adresse du projet : https://github.com/stealth35/mysql_prepare

Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.