php sql原生书删除,php – 如何获取Laravel删除/更新/插入语句的原始SQL?

我知道我可以在查询构建器上使用tosql方法来获取带有SELECT语句的绑定参数占位符的原始sql.

App\User::where(['id'=>'1'])->tosql();

06001

但是如何才能获得DELETE语句呢?

App\User::where(['id'=>'1'])->delete()->tosql();

PHP error: Call to a member function tosql() on integer on line 1

这会执行该语句,但我希望获得原始的,未插入的sql,其中的问号代表值而不实际运行查询.对于任何修改语句,例如INSERT或UPDATE,都适用相同的情况

但为什么,谁在乎呢?

这有点像xy problem.我的Web应用程序包含一个多进程架构.它运行自定义工匠命令,异步通信在事件驱动的循环中监听,以更新数据库.

我需要原始查询的原因是因为我想重用一个准备好的语句来提高性能.不幸的是,雄辩的方法没有暴露准备好的语句,所以为了重用一个,我必须自己从底层的PDO连接中准备它.

$sql = 'UPDATE `foo` SET `bar` = ? WHERE (`id` = ?)';

$statement = DB::connection()->getPdo()->prepare($sql);

while (true) {

$data = foo();

$statement->execute([$data->bar,$data->id]);

}

但是,这与抽象的sql语法构建器不同.因为我现在正在使用MysqL,所以我可以在语法上包含反引号.但现在我被供应商锁定了.比方说,老板说明天我们要转移到MS sql Server,然后很可能(至少)要抓住使用反引号而不是方括号的bug.

我想使用动态生成的sql语法在预准备语句中重用.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值