수색…


소개

이 스크립트는보고 장치 (IoT)를 처리하도록 설계되었습니다. 장치가 이전에 데이터베이스의 장치 테이블에서 권한이 부여되지 않은 경우 새 장치를 new_devices 테이블에 추가합니다. 업데이트 쿼리를 실행하고 affected_rows가 <1을 반환하면 삽입합니다.

새 장치 보고서가있을 때 처음 $ stmt-> affected_rows가 실행되면 0이 반환되고 이후의 통신은 1을 반환하고 1, 0, 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