我有一个模型函数,可以在我的CodeIgniter应用程序中更新用户:
// updates first of a user, return true if successful, false if not.
public function updateFirstName($userId, $newFirstName) {
$this->db->query("UPDATE users SET firstName='$newFirstName' WHERE id=$userId");
return // whether request was successful?
}
如何返回一个布尔值,以确保ID $userId
的用户已更新?例如,如果未找到ID为$userId
的用户,则应返回false。
答案 0 :(得分:36)
As commented,你试过$this->db->affected_rows()
吗?
这将告诉您已更新了多少行。
答案 1 :(得分:11)
检查以获取更多信息。 Active Records
public function updateFirstName($userId, $newFirstName) {
return $this->db
->where('id', $userId)
->update("users", array('firstName' => $newFirstName));
}
通过这种方式,您还可以避免使用之前的SQL注入
答案 2 :(得分:11)
if ($this->db->affected_rows() > 0)
{
return TRUE;
}
else
{
return FALSE;
}
或
if ($this->db->affected_rows() > 0)
return TRUE;
else
return FALSE;
或
return ($this->db->affected_rows() > 0) ? TRUE : FALSE;
修改强>
也(好多了)
return ($this->db->affected_rows() > 0);
答案 3 :(得分:10)
我发现一个更好的解决方案是管理ERROR和0个受影响行之间的差异。 0个受影响的行不一定是坏事,但是您确实想知道错误:
if ($this->db->_error_message()) {
return FALSE; // Or do whatever you gotta do here to raise an error
} else {
return $this->db->affected_rows();
}
现在你的功能可以区分......
if ($result === FALSE) {
$this->errors[] = 'ERROR: Did not update, some error occurred.';
} else if ($result == 0) {
$this->oks[] = 'No error, but no rows were updated.';
} else {
$this->oks[] = 'Updated the rows.';
}
只是快速黑客攻击 - 如果你有其他人使用它,你显然应该使代码更加冗长。
关键是,考虑使用_error_message来区分0个更新的行和真正的问题。
答案 4 :(得分:4)
您可以在Codeigniter中使用$this->db->affected_rows()
,这会在执行“写入”类型查询(插入,更新等)时返回数值。
在MySQL DELETE FROM TABLE
中返回0个受影响的行。数据库类有一个小的hack,允许它返回正确数量的受影响的行。默认情况下,此hack已启用,但可以在数据库驱动程序文件中将其关闭。 (来自CI用户指南)。对于Ci中已删除的行,它返回1.
答案 5 :(得分:3)
您可以使用$this->db->affected_rows();
检查查询是否成功运行
答案 6 :(得分:3)
我已使用此代码检查更新查询。
$status = $this->db->query("UPDATE users SET firstName='$newFirstName' WHERE id=$userId");
if($status)
return true;
else
return false;
答案 7 :(得分:2)
使用存储过程,您可以检查结果。
以下是存储过程示例:
CREATE DEFINER=`root`@`localhost` PROCEDURE `usp_UpdateInfo`(tableId int,tableName varchar(100) charset utf8,description varchar(400) charset utf8)
BEGIN
declare exit handler for sqlexception select 0 as `result`;
update table
set `name` = tableName,
description = description
where id = tableId;
select 1 as `result` ;
END
PHP示例代码:
$this->load->database();
$rs = $this->db->query('call usp_UpdateInfo(?,?,?)',array($tableId,$tableName,$description));
$this->db->close();
return $rs->result_array();
答案 8 :(得分:0)
public function updateInfo($newinfo) {
$this->db->update("some_table", $newinfo);
return ($this->db->affected_rows() > 0);
}
这将返回true或false
答案 9 :(得分:0)
试试这个:
public function updateFirstName($userId, $newFirstName) {
$this->db->where('id', $userId);
$this->db->set('firstName', $newFirstName);
$sql = $this->db->update('users');
if ($sql) { return TRUE; } // $sql - boolean true or false
}