Saya ingin memasukkan waktu ke MySQL dan mengambilnya kemudian membandingkan dengan waktu saat ini.

Terlepas dari kenyataan, banyak pertanyaan mengenai topik ini, setelah berjam-jam mencari, kebanyakan dari mereka menjawab hanya dengan Query mySQL atau bagaimana memformat timestamp. Sangat sulit untuk mengetahui kasus saya. tapi saya kira masalah saya berbeda. Saya bahkan tidak bisa memulai dengan datum yang diambil.

Idenya adalah ketika data diposting, ia memeriksa last_update_time di DB dengan country_code. Jika last_update_time dalam waktu satu jam, itu hanya mengambil waktu dan data lainnya. dan Jika perbedaan waktu lebih dari satu jam, itu memperbarui baris dalam DB.

Server terletak di situs jarak jauh sehingga zona waktunya berbeda. Dan menggunakan php 7 dan mySQL 5.7

Waktu penyisipan ke DB dalam zona waktu yang ditentukan berfungsi dengan baik, jenis bidang last_updated_time adalah DATETIME di MySQL.

function insertData($countryCode) {
  // Create connection
  $conn = new mysqli(DBHOST, DBUSER, DBPASSWORD, DBNAME);
  // Check connection
  if ($conn->connect_error) {
   die("Connection failed: " . $conn->connect_error);
  }

  date_default_timezone_set('Asia/Seoul'); 
  $currentTime = date("Y-m-d H:i:s");

  $sql = "INSERT INTO my_table (country_code, last_updated_time)
                              VALUES ('$countryCode', '$currentTime')";

  if (mysqli_query($conn, $sql)) {
    echo "INSERT Succeeded";
  }else {
    echo "Failed INSERT";
  }

 $conn->close();
}

Dan kemudian saya perlu membandingkan waktu lama (waktu yang dihemat) dengan waktu saat ini ketika halaman disegarkan. Saya mengharapkan orang-orang dari beberapa zona waktu jadi saya menetapkan date_default_timezone_set().

function compareTime($countryCode){
  $conn = new mysqli(DBHOST, DBUSER, DBPASSWORD, DBNAME);
  // Check connection
  if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
  }

  $sql = "SELECT last_updated_time FROM my_table WHERE country_code = '$countryCode'";
  $savedTime = mysqli_query($conn, $sql);

  if($savedTime->num_rows == 0) {
       echo 'does not exist';
  } else {

      date_default_timezone_set('Asia/Seoul'); 
      $currentTime =  date("Y-m-d H:i:s");
      $oldtime = strtotime($savedTime);
      $timeDiffInSec = intval(strtotime($currentTime) - $oldtime) % 60;

      $formattedOldTime = date("Y-m-d H:i:s",$oldtime);
      echo '<p>Current Time: '.$currentTime.'</p>';
      echo '<p>Old Time: '.$formattedOldTime.'</p>';
      echo '<p>Time Difference: '.$timeDiffInSec.'</p>';

      // Do the job only after 1 hour
      if ($timeDiffInSec > 60 && $currentTime > $oldtime) {
        // Do the job and update DB
      }
  }
  $conn->close();
}

compareTime('us');

Masalah yang saya miliki adalah saya tidak tahu cara mendapatkan waktu yang dihemat dengan benar dari mySQL di PHP. Saya tidak dapat mencetak waktu lama di halaman web atau membandingkan kedua waktu tersebut.

Meskipun waktu yang dihemat terlihat seperti 2017-12-26 17:07:37 ketika saya lihat melalui myPhpAdmin, echotercetak seperti di bawah ini.

Current Time: 2018-01-01 06:35:55
Old Time: 1970-01-01 09:00:00
Time Difference: 55

Bahkan echo $savedTime; tidak mencetak apa pun. Bagaimana saya bisa menyelesaikan ini? Terima kasih sebelumnya.

-1
Kyle KIM 1 Januari 2018, 00:38

1 menjawab

Jawaban Terbaik

$savedTime adalah hasil kueri, Anda harus mengambil hasilnya nanti.

Coba ini:

$oldtime = strtotime(mysqli_fetch_array($savedTime)[0]);

Omong-omong, karena Funk Forty Niner mengingatkan saya di komentar, Anda harus mempertimbangkan untuk menggunakan pernyataan yang disiapkan untuk menghindari serangan injeksi SQL. Lihat di tautan, itu sepadan.

1
jeprubio 31 Desember 2017, 22:53