2013-08-25 31 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 
相关问题