thinkphp使用Db删除数据时无法删除或查询结果错误问题

24 篇文章 0 订阅
17 篇文章 0 订阅

有时候我们再使用thinkphp时使用command或者多项目的情况下需要使用多个数据库。本案例就是这个问题当然对于单一数据库的操作也会出现这个问题。

使用Db来操作数据库时的误区

因为临时需要更换数据库操作某个表通常会这样来写

Db::connect([
    'type'            => 'mysql',
    'hostname'        => '127.0.0.1',
    // 数据库名
    'database'        => 'test',
    // 用户名
    'username'        => 'test',
    // 密码
    'password'        => 'test',
])

但是如果某个方法中使用该连接的地方非常多有人可能会考虑把这个连接初始化赋值给某个变量后边可以拿来用。[这是个误区]
错误代码如下:

$db = Db::connect([
    'type'            => 'mysql',
    'hostname'        => '127.0.0.1',
    // 数据库名
    'database'        => 'test',
    // 用户名
    'username'        => 'test',
    // 密码
    'password'        => 'test',
])

$db->table('customer')->where([
    ['name', '=', '伽马编程'],
    ['id', '<>', $v['id']]
])->find();
//后续的一连串操作

当然这样写我相信$db变量是要用多次的。看似没问题的写法但是其实是错误的。你会发现你在后续的各种数据库操作都不准确或者错误了,为什么呢?

错误原因

在给$db赋值时要看看connect返回的是什么。

return new $query(self::$connection);

在这儿connect返回的是一个query对象。而在后续操作中用到了where()

return $this->parseWhereExp('AND', $field, $op, $condition, $param);

where调用的parseWhereExp返回的结果是$this,这是链式操作所以。在后续使用where()来操作时其实前边的where条件还在。所以会出现错误的操作。

解决办法

如果真的需要这样操作大家可以把配置数组单独赋值,而不是Db::connect 也可以创建模型来复制protected $connection如果没有必要创建模型的情况下。大家可以再database.php中再配置个数据库使用配置名引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarsWill

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值