Vous trouverez des exemples dans les pages des manuels respectifs, get_result()
y bind_result()
.
Bien que les avantages et les inconvénients soient assez simples :
-
get_result()
est la seule façon saine de gérer les résultats
- mais il se peut qu'il ne soit pas toujours disponible sur certaines versions de PHP obsolètes et non prises en charge.
Dans une application web moderne, les données ne sont jamais affichées dès la requête. Les données doivent d'abord être collectées et ce n'est qu'ensuite que l'affichage doit être lancé. Ou même si vous ne suivez pas les meilleures pratiques, il y a des cas où les données doivent être retournées et non imprimées immédiatement.
En gardant cela à l'esprit, voyons comment écrire un code qui renvoie les données sélectionnées comme un tableau imbriqué de tableaux associatifs en utilisant les deux méthodes.
bind_result()
$query1 = 'SELECT id, first_name, last_name, username FROM `table` WHERE id = ?';
$stmt = $mysqli->prepare($query1);
$stmt->bind_param('s',$id);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $first_name, $last_name, $username);
$rows = [];
while ($stmt->fetch()) {
$rows[] = [
'id' => $id,
'first_name' => $first_name,
'last_name' => $last_name,
'username' => $username,
];
}
et n'oubliez pas de modifier ce code à chaque fois qu'une colonne est ajoutée ou supprimée du tableau.
get_result()
$query2 = 'SELECT * FROM `table` WHERE id = ?';
$stmt = $mysqli->prepare($query2);
$stmt->bind_param('s', $id);
$stmt->execute();
$rows = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
et ce code reste le même lorsque la structure de la table est modifiée.
Et ce n'est pas tout.
Dans le cas où vous décidez d'automatiser la routine ennuyeuse de préparation/liaison/exécution dans une fonction soignée qui serait appelée comme ceci
$query = 'SELECT * FROM `table` WHERE id = ?';
$rows = prepared_select($query, [$id])->fetch_all(MYSQLI_ASSOC);
avec get_result()
ce sera une tâche tout à fait plausible, une question de quelques lignes . Mais avec bind_param()
ce sera une quête fastidieuse.
C'est pourquoi j'appelle le bind_result()
méthode "laide".