Lorsque vous utilisez l'extension MySQLI de PHP pour les opérations de base de données, MySQLI :: STMT_INIT () est une méthode importante, qui est utilisée pour initialiser un objet d'instruction ( mysqli_stmt ), puis se prépare à exécuter des instructions SQL. Pour déterminer si l'instruction de requête a renvoyé le résultat ou combien de lignes sont affectées, utilisez NUM_ROWS (pour les instructions de sélection ) ou affecte_rows (pour insérer , mettre à jour ou supprimer ).
Cet article utilisera des exemples pour illustrer comment utiliser mysqli :: stmt_init () et combiner num_rows et affecté_rows pour obtenir l'impact des résultats de la requête.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// Vérifiez la connexion
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
?>
$stmt = $mysqli->stmt_init();
$sql = "SELECT id, name FROM users WHERE status = ?";
if ($stmt->prepare($sql)) {
$status = 'active';
$stmt->bind_param("s", $status);
$stmt->execute();
$stmt->store_result(); // Cette étape est un must,sinon num_rows Reviendra toujours 0
echo "Nombre de lignes renvoyées:" . $stmt->num_rows . "<br>";
if ($stmt->num_rows > 0) {
$stmt->bind_result($id, $name);
while ($stmt->fetch()) {
echo "utilisateurID: $id, Nom: $name<br>";
}
} else {
echo "Aucun enregistrement qui répond aux critères。";
}
$stmt->close();
} else {
echo "Le prétraitement a échoué:" . $stmt->error;
}
$stmt = $mysqli->stmt_init();
$sql = "UPDATE users SET status = ? WHERE last_login < ?";
if ($stmt->prepare($sql)) {
$new_status = 'inactive';
$cutoff_date = '2024-01-01';
$stmt->bind_param("ss", $new_status, $cutoff_date);
$stmt->execute();
echo "Nombre de lignes affectées:" . $stmt->affected_rows;
$stmt->close();
} else {
echo "Le prétraitement a échoué:" . $stmt->error;
}
Lorsque vous utilisez NUM_ROWS , STORE_RESULT () doit être appelé Sinon, il retournera toujours 0.
affecté_rows peut être lu directement sans appeler Store_Result () .
Après avoir utilisé l'objet Instruction, n'oubliez pas d'appeler $ stmt-> close () pour libérer la ressource.
Pour déboguer ou afficher les messages d'erreur, utilisez $ stmt-> erreur ou $ mysqli-> erreur .
En utilisant rationnellement mysqli :: stmt_init () et en combinant num_rows et affecté_rows , nous pouvons gérer plus efficacement le traitement des commentaires et des résultats des requêtes de base de données. Cela est essentiel pour développer des applications PHP stables et effectuées.