2013-08-25 33 views
0

我正在嘗試爲自動澆水創建一個php倒數計時器,我要讓crontab每分鐘運行一次,然後自動澆水。代碼如下class mysqli_result的對象無法轉換爲int

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
include 'php_serial.class.php'; 
require_once 'login.php'; 
//connect to server 
$con = mysqli_connect($server,$username,$password); 
if(!$con){ 
    die("Failed to connect:" . mysqli_connect_error()); 
} 
else { 
    //check database connection 
    $open_db = mysqli_select_db($con,$db); 
    if(!$open_db){ 
     die("Cannot connect to vatten database" . mysqli_error()); 
     } 
     } 
     //check time_left 
$sql = "SELECT time_left FROM `info`"; 
$time_left = mysqli_query($con,$sql); 
$sql2 = "SELECT last_sent FROM `info`"; 
$last_sent = mysqli_query($con,$sql2); 

if(!$time_left) { 
die("Database access failed" . mysqli_error($con)); 
} 
if($time_left >0) { // Error 1 here 
    $time_left = $time_left-1; // Error 2 here 
    mysqli_query($con, "UPDATE info SET time_left=$time_left"); 
    } 
    elseif($time_left <1 && $last_sent !== "[LOOOOOO]") { 
      $serial = new phpSerial; 
      $serial->deviceSet("/dev/ttyUSB0"); 
      $serial->confBaudRate(1200); 
      $serial->confParity("none"); 
      $serial->confCharacterLength(8); 
      $serial->confStopBits(1); 
      $serial->deviceOpen(); 
      $serial->sendMessage("[LOOOOOO]"); 
      mysqli_query($con, "UPDATE info SET time_left=$time_left"); 
     } 
mysqli_close($con); 
?> 

所以我得到的錯誤是 注意:類mysqli_result的對象不能轉換在/var/www/vatten/check.php爲int第27行

,另一個這樣的,但對於線28

而且除了它重置在數據庫中的「TIME_LEFT」 0

任何幫助,將不勝感激!

回答

1

你似乎不明白你在做什麼

  1. 您可以從一個表,一個查詢返回多個列。

    $sql = "SELECT time_left, last_sent FROM資訊";

  2. 一旦查詢已運行後,您需要使用mysqli_fetch_同時收集結果 一行?返回數組 或包含請求的列值的對象。

    $row = mysqli_fetch_assoc($result);

  3. 此查詢不需要土特產品使用一個變量,它可以是道指純SQL。

    更換UPDATE info SET time_left=$time_left 隨着UPDATE info SET time_left=time_left-1

那麼,這似乎對你的代碼更有組織的結構。

<?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', '1'); 
    include 'php_serial.class.php'; 
    require_once 'login.php'; 

    //connect to server 
    $con = mysqli_connect($server,$username,$password); 
    if(!$con){ 
     die("Failed to connect:" . mysqli_connect_error()); 
    } 
    //check database connection 
    $open_db = mysqli_select_db($con,$db); 
    if(!$open_db){ 
     die("Cannot connect to vatten database" . mysqli_error()); 
    } 
    //check time_left 
    $sql = "SELECT time_left, last_sent FROM `info`"; 
    $result = mysqli_query($con,$sql); 
    if (! $result) { 
     die('Query failed ' . $sql . ' Error:' . mysqli_error()); 
    } 

    $row = mysqli_fetch_assoc($result); 

    if($row['time_left'] > 0) { 
     mysqli_query($con, "UPDATE info SET time_left=time_left-1"); 
    } else { 
     if($row['time_left'] < 1 && $row['last_sent'] !== "[LOOOOOO]") { 
      $serial = new phpSerial; 
      $serial->deviceSet("/dev/ttyUSB0"); 
      $serial->confBaudRate(1200); 
      $serial->confParity("none"); 
      $serial->confCharacterLength(8); 
      $serial->confStopBits(1); 
      $serial->deviceOpen(); 
      $serial->sendMessage("[LOOOOOO]"); 
      // does not seem to achieve anything 
      // mysqli_query($con, "UPDATE info SET time_left=$time_left"); 
     } 
    } 
mysqli_close($con); 
?> 
1

聲明

$time_left = mysqli_query($con,$sql); 

返回類型mysqli_result的對象。使用結果的num_rows屬性。這是一個整數。

if($time_left->num_rows > 0) { 
0

您正在比較不同的數據類型所以 你必須在線20在$time_left PHP varible

$time_left = mysqli_query($con,$sql);//line 20 

與要與其INT 0比較$time_left(PHP的資源) PHP資源在線27

if($time_left >0) { // Error 1 here //line 27 
相關問題