php报错语句,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中:执行正确

5018126ec46fc310dcbd7a0b631d58b4.png

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

1eb763a79c2fd7ba43e702dd109dca65.png

然而更加奇怪的是,我将这句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语句中某些特性的原因。我搜索了很多相关问题均没有解决,或许是我疏忽了什么,但是能解决的话将帮我很大忙,非常感谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值