Joh*_*man 22 php mysql codeigniter
我有一个模型函数,用于更新我的Code Igniter应用程序中的用户:
// 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?
}
Run Code Online (Sandbox Code Playgroud)
如何返回一个布尔值,以确保ID的用户$userId已更新?例如,如果未找到具有ID的用户,则应返回false $userId.
saf*_*rov 11
请查看此以获取更多信息.活跃的记录
public function updateFirstName($userId, $newFirstName) {
return $this->db
->where('id', $userId)
->update("users", array('firstName' => $newFirstName));
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您还可以避免以前使用的sql注入
And*_*lin 11
if ($this->db->affected_rows() > 0)
{
return TRUE;
}
else
{
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
要么
if ($this->db->affected_rows() > 0)
return TRUE;
else
return FALSE;
Run Code Online (Sandbox Code Playgroud)
要么
return ($this->db->affected_rows() > 0) ? TRUE : FALSE;
Run Code Online (Sandbox Code Playgroud)
编辑
也(好多了)
return ($this->db->affected_rows() > 0);
Run Code Online (Sandbox Code Playgroud)
Ber*_*rto 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();
}
Run Code Online (Sandbox Code Playgroud)
现在你的功能可以区分......
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.';
}
Run Code Online (Sandbox Code Playgroud)
只是一些快速黑客 - 如果你有其他人使用它,你显然应该使代码更加冗长.
关键是,考虑使用_error_message来区分0个更新的行和一个真正的问题.
您可以$this->db->affected_rows()在Codeigniter 中使用它,在执行“写入”类型查询(插入,更新等)时返回数字值。
在MySQL中,DELETE FROM TABLE返回0个受影响的行。数据库类有一个小的技巧,可以使其返回正确数量的受影响的行。默认情况下,此黑客是启用的,但可以在数据库驱动程序文件中将其关闭。(来自CI用户指南)。对于Ci中已删除的行,它返回1。
| 归档时间: |
|
| 查看次数: |
64291 次 |
| 最近记录: |