首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将类mysqli_result的对象转换为int。

无法将类mysqli_result的对象转换为int。
EN

Stack Overflow用户
提问于 2013-08-25 16:58:52
回答 3查看 36.1K关注 0票数 1

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

代码语言:javascript
运行
复制
<?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。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-25 17:35:42

你似乎不明白你在做什么

  1. 可以使用单个查询从表中返回多个列。 $sql =“从info中选择time_left,last_sent”;

  1. 查询运行后,您需要使用mysqli_fetch_*一次收集一行结果,以返回包含请求列值的数组或对象。 $row = mysqli_fetch_assoc($result);

  1. 这个查询不需要使用变量,它可以在纯sql中完成。 替换UPDATE info SET time_left=$time_leftUPDATE info SET time_left=time_left-1

因此,对于您的代码来说,这似乎是一个更有组织的结构。

代码语言:javascript
运行
复制
<?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    include 'php_serial.class.php';
    require_once 'login.php';

    //connect to server
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $con = mysqli_connect($server, $username, $password, $db);

    //check time_left
    $sql = "SELECT time_left, last_sent FROM `info`";
    $result = mysqli_query($con, $sql);

    $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");
        }
    }
票数 4
EN

Stack Overflow用户

发布于 2013-08-25 17:04:10

声明

代码语言:javascript
运行
复制
$time_left = mysqli_query($con,$sql);

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

代码语言:javascript
运行
复制
if($time_left->num_rows > 0) {
票数 4
EN

Stack Overflow用户

发布于 2016-01-16 22:35:16

您正在比较不同的数据类型(),因此在第20行()的$time_left变量中有php资源。

代码语言:javascript
运行
复制
$time_left = mysqli_query($con,$sql);//line 20

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

代码语言:javascript
运行
复制
if($time_left >0) { // Error 1 here //line 27
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18431450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档