2011-08-22 35 views

回答

4

update函数返回一个值:

$result = $this->db->update('mytable', $data); 

检查值为TRUE(成功)或FALSE(失败)。 update运行query内部,然后返回的queryRef)的返回值:

查询()函数返回时,“读”式的查询运行数据库结果的对象,你可以用它来展现你的结果。当“写入”类型的查询运行时,它只是返回TRUE或FALSE,取决于成功或失败。

+0

我试着用我的查询“$结果= $ this-> db-> update('users',$ data,array('UserName'=> $ _POST [“UserName”]));“如果用户名不存在于表中,它仍然返回成功 –

+0

如果你想插入而不是更新,那么你应该这样做,否则你可能想要配置你的db,如果你尝试更新一个不存在的行,它会出错。做更新,我如果不存在,则为nsert:http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html,http://stackoverflow.com/questions/1361340/how-to-insert-if -not-exists-in-mysql – hakre

2

使用

$this->db->affected_rows() 

,看看有多少行已经影响了写类型的查询(UPDATE,INSERT,等等)

http://codeigniter.com/user_guide/database/helpers.html

+0

ive试过这也可以说,即时尝试更新密码和即时输入相同的密码,而不会改变然后受影响的行返回0 :( –

+0

保持你的大脑编码时开启,如果你没有udpate,那么更新不会影响任何行。该函数按照公布的方式工作,不要成为一个傻瓜,用它作为工具。 – hakre

0

两个答案都是有效的。你只需要根据情况使用每一个。如果您如果查询被执行使用这种方法只是检查:

$result = $this->db->update('mytable', $data); 

如果你真的想要的行数影响了第二种方法比较好:

$this->db->affected_rows() 

但是我总是使用第二种方法。更新查询就是一个很好的例子。查询可以成功,但数据库中没有任何更新,因为您试图更新的值实际上等于您在查询中发送的值。

这将是一个误报。和受影响的行将是0. 我希望它有帮助=)

+0

是的,但在这种情况下,你如何发现这是一个误报或不? –