Recherche…


Introduction

Ce script est conçu pour gérer les périphériques de génération de rapports (IoT), lorsqu'un périphérique n'est pas préalablement autorisé (dans la table des périphériques de la base de données), j'ajoute le nouveau périphérique à une table new_devices. J'exécute une requête de mise à jour et si related_rows renvoie <1, j'insère.

Lorsque j'ai un nouveau rapport sur le périphérique, la première fois que $ stmt-> affecte_rows s'exécute, il renvoie 0, la communication suivante renvoie 1, puis 1, 0, 2, 2, 2, 0, 3, 3, 3, 3, 3 et 3 , 0, 4, 0, 0, 6, 6, 6, etc.

C'est comme si la déclaration de mise à jour échouait. Pourquoi?

$ Stmt-> PHP_rows affecté PHP par intermittence retourne 0 quand il doit retourner un entier positif

<?php
    // if device exists, update timestamp
    $stmt = $mysqli->prepare("UPDATE new_devices SET nd_timestamp=? WHERE nd_deviceid=?");
    $stmt->bind_param('ss', $now, $device);
    $stmt->execute();
    //echo "Affected Rows: ".$stmt->affected_rows; // This line is where I am checking the status of the update query.

    if ($stmt->affected_rows < 1){ // Because affected_rows sometimes returns 0, the insert code runs instead of being skipped. Now I have many duplicate entries.
        
        $ins = $mysqli->prepare("INSERT INTO new_devices (nd_id,nd_deviceid,nd_timestamp) VALUES (nd_id,?,?)");
        $ins -> bind_param("ss",$device,$now);
        $ins -> execute();
        $ins -> store_result();
        $ins -> free_result();
    }
?>


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow