mysqli_result类的对象无法转换为int

时间:2013-08-25 16:58:52

标签: php mysql

我正在尝试为我的自动浇水创建一个PHP倒计时,我将让crontab每分钟运行一次并自动转动浇水。代码如下

<?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);
?>

所以我得到的错误是 注意:第27行的/var/www/vatten/check.php中无法将类mysqli_result的对象转换为int

和另一个像那样但是对于第28行。

除此之外,它将数据库中的“time_left”重置为0

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

声明

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

返回mysqli_result类型的对象。使用结果的num_rows属性。那是一个整数。

if($time_left->num_rows > 0) {

答案 1 :(得分:2)

你似乎不明白你在做什么

  1. 您可以使用单个查询从表中返回多个列。

    $sql = "SELECT time_left, last_sent FROM {信息{1}}

  2. 运行查询后,您需要收集结果 使用mysqli_fetch_一次一行?返回一个数组 或包含所请求列值的对象。

    ";

  3. 此查询不需要使用变量,它可以是纯sql中的dow。

    替换$row = mysqli_fetch_assoc($result); 使用UPDATE info SET time_left=$time_left

  4. 所以这似乎是一个更有组织的代码结构。

    UPDATE info SET time_left=time_left-1

答案 2 :(得分:0)

您正在比较不同的数据类型 你在$time_left php varible

中的第20行有php资源
$time_left = mysqli_query($con,$sql);//line 20

您正在比较$time_left(php资源)与第27行的 int 0

if($time_left >0) { // Error 1 here //line 27