thinkphp add()和save()执行完毕,有返回值,但是数据库并未有修改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp add()和save()执行完毕,有返回值,但是数据库并未有修改相关的知识,希望对你有一定的参考价值。

//登录成功,更新用户表登录时间和ip
echo 'BEGIN';
$save['logindate'] = $logindate;
$save['loginip'] = $loginip;
$where_save['username'] = $username;
$user= M('User');
$user->where($where_save)->save($save);
echo 'END';
以上是代码,输出sql后直接从数据库运行是没问题的,返回值是1没有报错之类的

有没有传错模型,估计是添加到其他地方去了追问

这个应该不会的,首先我能确定没有错,再有输出的sql是没问题的,而且有返回值说明sql执行了,模型传错应该会报错的吧

追答

表名没写错,那就是数据库连接有问题了,也可以先刷新一下数据库看看是不是缓存的问题

追问

缓存问题我试过了,浏览器缓存,程序运行的缓存全都清理过;
数据库连接问题的话,其他地方都是没有问题的,包括find、select等都没问题

追答

那就是没有数据传入数据库,也就是你没有接收到登录时间和IP

追问

如果没有收到会修改表内容为''的,我也试过直接给值的方法,仍然不行

追答

where($where_save) where这里面是个条件不是一个数组

追问

是数组的,突然发现一个问题,我add的返回值是2310,根据thinkphp框架这个值是表的id,我表只有一千行,用这个数find()的时候返回

Array
([id] => 2325 [message] => 登入系统 [date] => 2015-10-20 15:11:45
[ip] => 127.0.0.1
[userid] => admin
[shop] => 26
)

追答

那就是你的条件有问题了,要指定修改哪一条

参考技术A 是不是没有加事务追问

功能没必要加事物,不加事物会导致这种问题吗

追答

数据库做修改就要有事务,如果是查询就没必要加

追问

.谁说修改就必须要有事务的。。。如果数据表类型不支持事务你怎么办

追答

你对事务的理解是什么

追问

事务是一个执行单位,不过就是把sql包起来了

追答

片面,只知道定义,不知道它的意义

追问

你很无聊知不知道,当老师的吧,能不能解决问题?

追答

你用的什么数据库

追问

mysql

追答

确定加了事务还不行,那就是你说的数据表类型不支持事务
ALTER TABLE 表名 TYPE = INNODB

追问

我可以很严肃的告诉你,不关事务的事。数据表类型是innoDB,我也按你说的加事务试过了

ThinkPHP的增删改查!

对表的操作
增加:M(‘表名‘)->add($data);  (可以是数组)
删除:M(‘表名‘)->delete($data); (不可以是数组,删除多个有另外的方法)
修改:M(‘表名‘)->save($data);
查询:M(‘表名‘)->select();
 
增加:add
1、通过关联数组的方式添加:
public function addFun(){
    $data = array(
        ‘goods_name‘=>‘小米‘,
        ‘goods_price‘=>‘3210‘
    );
    $result = M(‘goods‘)->add($data);
}
这里的 $result 返回结果:
如果主键是自动增加,则返回自动增加的编号;
否则就返回受影响的行数(有多少行发生改变 0 或者 1);
如果SQL语句有错误,则返回 false ;
 
2、通过AR(active record)方式添加:
public function addFun(){
    $goods = M(‘goods‘);
    $goods->goods_name = ‘山寨机‘;
    $goods->goods_price = 998;
    $result = $goods->add();
}

 

删除:delete

删除单条数据:

public function deleteFun(){
    //result 返回受影响的行数
    $result = M(‘goods‘)->delect(138);
}

删除多条数据:

public function deleteFun(){
    $result = M(‘goods‘)->delect(‘137,138,140‘);
}

通过where来删除:

$result = M(‘goods‘)->where("goods_price >= 900")->delect();

 

修改:save

只有知道了主键才能够进行修改,所以修改比增加多了主键。
1,通过关联数组的方法修改:
public function saveFun(){
$data = array(
    ‘goods_name‘=>‘小米‘,
    ‘goods_price‘=>‘3210‘,
    ‘goods_id‘=>‘130‘
);
$result = M(‘goods‘)->save($data);

2,通过AR (active record )方式修改:

public function saveFun(){
    $goods = M(‘goods‘);
    $goods->goods_name = ‘山寨机‘;
    $goods->goods_price = 998;
    $goods->goods_id=130;
    $result = $goods->save();
}

 

查询:select

简单查询
public function showList(){
    $list = M(‘Goods‘)->select();
    $this->assign(‘list‘,$list);
    $this->display();
}
<volist name="list" id="vo">
{$vo.id}:{$vo.name}
</volist>

条件查询

1、获取一条记录:

$list = M(‘Goods‘)->find();

2、查询主键为 2 的记录:

$list = M(‘Goods‘)->select(2);

3、查询编号为 2、3、4、5 的记录:

$list = M(‘Goods‘)->select(‘2,3,4,5,6‘);

4、where条件查询:

$list = M(‘Goods‘)->where("goods_name like ‘%诺基亚%‘")->select();
$list = M(‘Goods‘)->where("goods_name like ‘%诺基亚%‘ and goods_price >= 3000")->select();

5、limit条件查询:

$list = M(‘Goods‘)->limit(‘5‘)->select();
这里的查询的前5条,正常的写法是limit(0,5),但如果是从零开始可以这样写 limit(5);
查询两条,但是从2开始 可以这样写 limit(2,5);

6、order排序:

$list = M(‘Goods‘)->limit(‘5‘)->order(‘goods_price desc‘)->where("goods_price >=50")->select();

7、指定字段进行查询:

$list = M(‘Goods‘)->field(‘goods_name,goods_price‘)->select();

 

增删改查终极方法:直接写SQL语句:
查询数据库使用 query() 方法:
public function sqlFun(){
    //查询
    // 空模型  是sw_goods不是goods,要全名
    $list = M()->query("select * from sw_goods");
}

增/删/改 使用execute()方法: 

public function sqlFun(){
    //增 删 改
    $list = M()->query("delete * from sw_goods where goods_id=‘135‘");
}

这里的 result 返回的是受影响的行数;

   

以上是关于thinkphp add()和save()执行完毕,有返回值,但是数据库并未有修改的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp save或add写入不全

ThinkPHP add save delete的返回说明

总结ThinkPHP使用技巧经验分享

ThinkPHP的增删改查!

thinkphp的save方法

thinkphp update更新数据问题