Aide sur les Procédures stockées
Bonne rencontre,
Après une recherche sur ce forum et sur la toile, jai limpression quil y a un flou et beaucoup dinformations contradictoire sur les procédures stockées avec PHP. Jai déjà réalisé ce genre de travail mais avec un SGBD en MSSQL.
[]
//On appel la procédure stockée
$stmt = mssql_init('AddAgence', $conn);
//On fait les binds
mssql_bind($stmt, "@Nom", $nom, SQLVARCHAR);
mssql_bind($stmt, "@fkAgence",$agencemere, SQLINT4);
//On injecte
$proc_result = mssql_execute($stmt);
// On exploite le résultat ici un seule valeur de retour
$row = mssql_fetch_row($proc_result)
[]
Ca fonctionne très bien et je nai pas rencontré de problème. Par contre et cest là que je suis étonné, ce nest pas très clair avec un SGBD comme Mysql. Jai lu que pour utiliser une procédure stockée en PHP avec du Mysql, il fallait utiliser du mysqli ? Vrai ou faux ? Dans ce cas et si jai bien compris, on doit faire comme ceci :
<?php
$link = mysqli_connect("localhost", $username, $password, $database);
$query = "CALL ps_chercher(ma, liste, de, param);";
$stmt = mysqli_prepare($link, $query);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $1, $2, $3, $4, $5);
while (mysqli_stmt_fetch($stmt)) {
printf ("%s - %s - %s - %s - %s<br>", $1, $2, $3, $4, $5);
}
mysqli_stmt_close($stmt);
mysqli_close($link);
?>
Ou alors, on peut utiliser du PDO en utilisant ce genre de code :
<?php
$stmt = $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);
// Appel de la procédure stockée
$stmt->execute();
print "La procédure a retourné : $return_value\n";
?>
Oui sauf que jai lu que le PDO nétait pas encore très au point De même, pouvez-vous me dire si cest toujours dactualité ? Il y a t-il d'autres méthodes ?
D'avance, merci.
Amicalement,
Cerbère.
Réponses apportées à cette discussion
Oui sauf que jai lu que le PDO nétait pas encore très au point
Ça sort d'où ça ? As-tu testé et eu des difficultés avec ça ?
Lu sur le web dieu sait où et j'ai eu quelques échos de prof ou encore d'autres personnes qui utilisent un peu de PHP.
J'ai déjà effectivement testé et je n'ai pas eu de problème mais mes tests n'était pas très compliqués.
Enfin c'est le flou, c'est d'ailleurs pour ça que je pose la question. ;)
Je peux utiliser cette technologie les yeux fermer ?
Je n'irai peut-être pas jusqu'à dire «les yeux fermés», mais tu peux avantageusement utiliser PDO. Ça présentera en outre l'avantage de pouvoir basculer vers un SGBD ou l'autre avec beaucoup moins de problèmes de compatibilité. C'est du reste l'intérêt majeur des couches d'abstractions Là, tu utilises MS-SQL, mais tu pourrais reproduire exactement la même chose avec Oracle, MySQL ou pourquoi pas DB2 sans changer quoique ce soit dans ton code PHP. Bien entendu il resterait des problèmes de portabilité des procédures stockées sur ces différents SGBDs, mais le problème est alors dans la base de données, pas du coté applicatif.
Merci pour ta réponse Cyrano.
Nous allons probalement utiliser PDO.
En plus, si j'ai bien vu avec la version 5.3 le driver PDO est intégré en natif.