navicat可正确执行sql语句,php中却报错Fatal error:non-object

如题,navicat可正确执行sql语句,php中却无法执行报错。我有一条sql语句,处理过期未支付订单,order_state=0 未支付,order_state=4过期

诡异的是,我在navicat和cmd命令行中执行,都没有任何错误可以执行。但是在php中却报错:Fatal error: Call to a member function execute() on a non-object

相关代码

sql语句:

UPDATE seat_table a
LEFT JOIN order_table b ON a.seat_id = b.seat_id
SET a.count = a.count + 1,
 b.order_state = '4'
WHERE
    a.count < 50
AND b.seat_id IN (
    SELECT
        c.seat_id
    FROM
        (
            SELECT
                seat_id
            FROM
                order_table
            WHERE
                DATE_ADD(
                    order_time,
                    INTERVAL 15 MINUTE
                ) < now()
            AND order_state = '0'
        ) c
)

php语句:

$stmt = $mysqli->prepare("update seat_table a LEFT JOIN order_table b on a.seat_id = b.seat_id set a.count = a.count + 1,b.order_state = '4' WHERE a.count < 50 and b.seat_id in (SELECT c.seat_id FROM (SELECT seat_id FROM order_table WHERE DATE_ADD( order_time,INTERVAL 15 MINUTE ) < now() AND order_state = '0') c)");
    

    if ($stmt->execute()) { // 更新成功
        $stmt->close();
    } else { // 更新失败
        die("500");
    }

运行结果

navicat中:执行正确

https://img2.mukewang.com/5c8f36a5000172ae08000162.jpg

小程序连接php后台则报错:

https://img.mukewang.com/5c8f36a700014dbf08000218.jpg

然而更加奇怪的是,我将这句sql语句分为两段:

完整版:

update seat_table a LEFT JOIN order_table b on a.seat_id = b.seat_id set a.count = a.count + 1,b.order_state = '4' WHERE a.count < 50 and b.seat_id in (SELECT c.seat_id FROM (SELECT seat_id FROM order_table WHERE DATE_ADD( order_time,INTERVAL 15 MINUTE ) < now() AND order_state = '0') c)

分为两段:in()语句里面的单独提取出来
1、用in(1)代替是因为简便同时我第二部分查找出来的就是一条记录值为1

update seat_table a LEFT JOIN order_table b on a.seat_id = b.seat_id set a.count = a.count + 1,b.order_state = '4' WHERE a.count < 50 and b.seat_id in(1)

2、

SELECT c.seat_id FROM (SELECT seat_id FROM order_table WHERE DATE_ADD( order_time,INTERVAL 15 MINUTE ) < now() AND order_state = '0') c)

这两部分都能够在navicat和php中正确执行。所以可以排除我的php版本不支持sql语句中某些特性的原因。我搜索了很多相关问题均没有解决,或许是我疏忽了什么,但是能解决的话将帮我很大忙,非常感谢

PIPIONE
浏览 805回答 3
3回答

隔江千里

打印下$mysqli->error;看看是不是有报错信息

翻阅古今

show variables like '%log_error%'; 看下错误日志

摇曳的蔷薇

打印下$mysqli
打开App,查看更多内容
随时随地看视频慕课网APP