Position actuelle: Accueil> Derniers articles> stmt_init comment travailler avec num_rows ou affecté_rows pour obtenir des résultats

stmt_init comment travailler avec num_rows ou affecté_rows pour obtenir des résultats

M66 2025-05-29

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.

1. Préparation: connexion à la base de données

 <?php
$mysqli = new mysqli("localhost", "username", "password", "database");

// Vérifiez la connexion
if ($mysqli->connect_error) {
    die("Échec de la connexion: " . $mysqli->connect_error);
}
?>

2. Utilisez STMT_INIT pour initialiser l'instruction et préparer la requête

 $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;
}

3. Utilisez affecté_rows pour obtenir le nombre de lignes affectées par la mise à jour, l'insertion ou la suppression

 $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;
}

4. Choses à noter

  1. Lorsque vous utilisez NUM_ROWS , STORE_RESULT () doit être appelé Sinon, il retournera toujours 0.

  2. affecté_rows peut être lu directement sans appeler Store_Result () .

  3. Après avoir utilisé l'objet Instruction, n'oubliez pas d'appeler $ stmt-> close () pour libérer la ressource.

  4. Pour déboguer ou afficher les messages d'erreur, utilisez $ stmt-> erreur ou $ mysqli-> erreur .

V. Conclusion

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.