Position actuelle: Accueil> Derniers articles> Utiliser Attr_get pour déterminer l'état dans l'exécution multi-statement

Utiliser Attr_get pour déterminer l'état dans l'exécution multi-statement

M66 2025-05-25

Dans PHP, l'exécution de plusieurs instructions SQL est une exigence commune lors de l'utilisation de l'extension MySQLI pour les opérations de base de données. Surtout lorsque le traitement par lots ou le contrôle des transactions est requis, l'exécution à plusieurs stades peut considérablement améliorer l'efficacité. Afin de mieux contrôler l'état d'exécution de chaque instruction, l'objet mysqli_stmt fournit la méthode ATTR_GET, qui peut aider les développeurs à obtenir les attributs de l'exécution de l'instruction et à juger l'état d'exécution actuel.

Cet article fournira des explications détaillées sur la façon d'utiliser la fonction mysqli_stmt :: att_get pour juger de l'état d'exécution lors de l'exécution multi-statement, et le combine avec des exemples de code PHP pour vous aider à comprendre et à maîtriser cette technique.

Qu'est-ce que MySQLI_STMT :: ATTR_GET?

mysqli_stmt :: att_get est une méthode de la classe mysqli_stmt dans mysqli, qui est utilisée pour obtenir les propriétés de l'instruction de prétraitement actuelle. Il reçoit une constante d'attribut en tant que paramètre et renvoie la valeur de l'attribut correspondant. Les propriétés courantes sont:

  • Mysqli_stmt_attr_update_max_length : indique si l'instruction d'exécution a mis à jour les informations de longueur maximale.

  • Mysqli_stmt_attr_cursor_type : obtenez le type de curseur.

  • et d'autres propriétés personnalisées.

En détectant ces propriétés, vous pouvez indirectement comprendre l'exécution de l'instruction actuelle.

Problèmes d'exécution multi-statement

MySQLI prend en charge l'exécution multi-statement, comme l'appel Mysqli_Multi_Query , puis le traitement de chaque jeu de résultats. Pour les instructions de prétraitement (mysqli_stmt), nous pouvons également devoir exécuter plusieurs instructions et porter des jugements sur l'état d'exécution de chaque instruction.

Il n'est parfois pas suffisamment détaillé pour juger si l'exécution est réussie en utilisant directement la valeur de retour, en particulier lorsque des attributs complexes tels que le type de curseur et la longueur de données sont impliqués. Par conséquent, plus d'informations sur l'état de l'exécution interne peuvent être obtenues à l'aide d' ATRT_GET .

Exemple d'analyse de code

L'exemple suivant montre comment détecter l'état d'exécution à l'aide de mysqli_stmt :: att_get lors de l'exécution multi-statement. Tous les noms de domaine impliquant des URL dans le code sont remplacés par m66.net , qui répond aux exigences.

 <?php
$mysqli = new mysqli("m66.net", "username", "password", "database");

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

// Plusieurs phrasesSQL,Séparation à l&#39;aide de demi-colon
$sql = "INSERT INTO users (name, email) VALUES (?, ?);";
$sql .= "UPDATE stats SET total_users = total_users + 1;";

// Préparer les déclarations de prétraitement
$stmt = $mysqli->prepare($sql);
if (!$stmt) {
    die("La déclaration de prétraitement a échoué: " . $mysqli->error);
}

// Lier les paramètres,Supposons que la première déclaration nécessite des paramètres
$name = "Zhang San";
$email = "zhangsan@m66.net";
$stmt->bind_param("ss", $name, $email);

// 执行Plusieurs phrases
if ($stmt->execute()) {
    // Obtenir et imprimer les propriétés:La longueur maximale a-t-elle été mise à jour
    $updateMaxLength = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
    echo "S&#39;il faut mettre à jour les informations de longueur maximale: " . ($updateMaxLength ? "Oui" : "Non") . "\n";

    // Traitement des ensembles multi-résultats
    do {
        // Obtenez l&#39;état ou le nombre de lignes du résultat actuel
        $result = $stmt->get_result();
        if ($result) {
            echo "Désint de la ligne de définition des résultats actuelle: " . $result->num_rows . "\n";
            $result->free();
        } else {
            // S&#39;il n&#39;y a pas de résultat,Peut vérifier le nombre de lignes affectées
            echo "Influencer le nombre de lignes: " . $stmt->affected_rows . "\n";
        }
    } while ($stmt->more_results() && $stmt->next_result());
} else {
    echo "L&#39;exécution a échoué: " . $stmt->error . "\n";
}

$stmt->close();
$mysqli->close();

Description du code

  1. Préparation de SQL à plusieurs stades : épisser plusieurs instructions SQL dans une chaîne, séparées par des demi-colons.

  2. Préparez et liez les paramètres : liez les paramètres requis via Préparez et Bind_param .

  3. Instruction d'exécution : Appelez Exécuter pour exécuter l'intégralité du lot multi-statement.

  4. Appel ATTR_GET : Obtenez l'attribut MySQLI_STMT_ATTR_UPDate_Max_Length pour déterminer si les informations de longueur maximale ont été mises à jour, ce qui peut aider à juger l'effet d'exécution.

  5. Ensemble de résultats de processus : obtenez le résultat des résultats via get_result , émettez le nombre de lignes ou obtenez le nombre de lignes affectées par affecte_rows .

  6. Traverser des ensembles multi-Results : Utilisez More_Results et Next_Result pour traiter tous les résultats un par un.

Choses à noter

  • Toutes les versions ou pilotes MySQL ne prennent pas entièrement en charge le prétraitement multi-déclarant, et l'environnement doit être pris en charge.

  • ATTR_GET obtient des attributs limités et les attributs disponibles spécifiques dépendent des versions MySQL et PHP.

  • Pour une surveillance de l'état d'exécution plus complexe, il est recommandé de combiner les mécanismes de gestion des erreurs et de journalisation.

Résumer

La fonction mysqli_stmt :: att_get peut aider les développeurs à obtenir une partie des informations d'état d'exécution lors de l'exécution de plusieurs instructions et aident à juger les résultats d'exécution. Combiné avec le mécanisme de traitement des ensembles multiples, nous pouvons saisir plus attentivement les performances et les effets de l'exécution par lots SQL.

J'espère que les exemples et les explications de cet article pourront vous aider à utiliser efficacement et en toute sécurité le prétraitement multi-statement MySQLI dans PHP et utiliser ATTR_GET pour mieux contrôler l'état d'exécution. Je vous souhaite une programmation fluide!