Php 没有返回正确的整数
我试图弄明白为什么在我第一次运行库中的这个函数时,当我打印max_user_id时,它会返回1作为整数。它应该返回10000。我还包括了用户模型函数。您是否希望指出,在第一次运行模型函数时,它是空的 图书馆Php 没有返回正确的整数,php,codeigniter,Php,Codeigniter,我试图弄明白为什么在我第一次运行库中的这个函数时,当我打印max_user_id时,它会返回1作为整数。它应该返回10000。我还包括了用户模型函数。您是否希望指出,在第一次运行模型函数时,它是空的 图书馆 /** * Create new user on the site and return some data about it: * user_id, username, password, email, new_email_key (if any). * * @param st
/**
* Create new user on the site and return some data about it:
* user_id, username, password, email, new_email_key (if any).
*
* @param string
* @param string
* @param string
* @param string
* @param string
* @return array
*/
function create_user($username, $email, $password, $first_name, $last_name)
{
if ((strlen($username) > 0) AND !$this->ci->users->is_username_available($username))
{
return FALSE;
}
elseif (!$this->ci->users->is_email_available($email))
{
return FALSE;
}
else
{
$genPassHash = $this->ci->genfunc->GenPassHash($password);
$max_user_id = $this->ci->users->get_max_users_id();
echo $max_user_id;
$user_data = array(
'username' => $username,
'password' => $genPassHash[0],
'password2' => $genPassHash[1],
'email' => $email,
'first_name' => $first_name,
'last_name' => $last_name,
'new_email_key' => md5(rand().microtime()),
'user_id' => $max_user_id,
'ip_address' => $this->ci->input->ip_address()
);
if ($this->ci->users->create_user($user_data) == FALSE)
{
$user_data['user_id'] = $res['user_id'];
$user_data['password'] = $password;
unset($user_data['last_ip']);
return $user_data;
}
}
return FALSE;
}
型号:
/**
* Get the max int of users id
*
* @return int
*/
function get_max_users_id()
{
$this->db->select_max('user_id');
$query = $this->db->get('users');
if ($query->num_rows() > 0)
{
$row = $query->row();
return $row->user_id +1;
}
else
{
return 10000;
}
}
始终返回1行。如果不存在行,则返回一个值为NULL的行
因此,您需要执行以下操作:
if (!$row->user_id) { return 10000; }
请告诉我,你不是用这个来做插入。如果两个用户同时被创建,并且都尝试使用ID 7创建,会怎么样?自动递增字段的存在是有原因的
始终返回1行。如果不存在行,则返回一个值为NULL的行
因此,您需要执行以下操作:
if (!$row->user_id) { return 10000; }
请告诉我,你不是用这个来做插入。如果两个用户同时被创建,并且都尝试使用ID 7创建,会怎么样?自动递增字段的存在是有原因的。问题在于您的select_max(“用户id”)生成类似
SELECT MAX(user_id) from users;
SELECT MAX始终返回一行,因此您的行数始终大于0。如果没有行,则可能为空,但您没有检查该行。问题在于您的select_max(“用户id”)生成了如下内容
SELECT MAX(user_id) from users;
SELECT MAX始终返回一行,因此您的行数始终大于0。如果没有行,它可能为空,但您没有检查它。看起来
$query->num\u rows()
不大于零。您确定您的表不是空的吗?此时表是空的。看起来$query->num_rows()
不大于零。你确定你的表不是空的吗?在这一点上,表是空的。这是一个很好的观点,但是我的系统出现这种情况的可能性非常小。如果表是空的,又该怎么办呢?即使可能性非常小,当问题很容易避免时,这是一种非常糟糕的编程实践。只需使用自动增量列。或者,如果由于某种原因无法执行此操作,则需要锁定该表,以确保没有其他人选择相同的ID。(或者如果您真的确信不会发生这种情况,请留下它,并希望没有用户会收到一个非常有趣的错误:p)如果该表为空,您的意思是什么?关于MAX()的事?像MAX这样的函数总是在MySQL中返回一行。即使桌子是空的。它只会返回一个带有NULL的行,而不是一个数字最大值。哦,好吧,我在这个表中已经有一个自动递增的行,既然如此,当表为空时,我应该使用什么来代替最大值。这是一个很好的观点,但是在我的系统中,这种可能性非常小。如果表为空,又该怎么办呢?即使可能性非常大很小,当问题很容易避免时,这是一种非常糟糕的编程实践。只需使用自动增量列。或者,如果由于某种原因无法执行此操作,则需要锁定该表,以确保没有其他人选择相同的ID。(或者如果您真的确信不会发生这种情况,请留下它,并希望没有用户会收到一个非常有趣的错误:p)如果该表为空,您的意思是什么?关于MAX()的事?像MAX这样的函数总是在MySQL中返回一行。即使桌子是空的。它只会返回一个NULL行,而不是一个数值最大值。哦,好吧,我在这个表中已经有一个自动递增的行,既然如此,当表为空时,我应该用什么来代替最大值。既然它为空,我应该用什么来代替最大值呢