サーチ…


前書き

このスクリプトはレポートデバイス(IoT)を処理するように設計されています。デバイスが以前に承認されていない場合(データベースのデバイステーブル内)、新しいデバイスをnew_devicesテーブルに追加します。私は更新クエリを実行し、affected_rowsが<1を返した場合、挿入します。

新しいデバイスレポートを取得すると、最初に$ stmt-> affected_rowsが実行されて0が返され、その後の通信では1が返され、次に1、0、2、2、2、0,3,3,3,3,3,3 、0、4、0、0、6、6、6など

これは、更新ステートメントが失敗しているかのようです。どうして?

PHPの$ stmt-> affected_rowsは、正の整数を返すべきときに断続的に0を返します

<?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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow