未返回正确的INT


Not returning correct INT

我正试图弄清楚为什么当我第一次运行库中存在的函数时打印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   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;      
    } 
}
SELECT MAX(blah) FROM bleh;

总是返回1行。如果不存在行,则返回一个值为NULL的行。

所以,你需要做:

if (!$row->user_id) { return 10000; }

请告诉我,你不是用这个来做插入。如果两个用户同时创建,并且都尝试使用ID 7进行创建,该怎么办?自动递增字段的存在是有原因的。

问题是您的select_max('user_id')会生成类似的东西

SELECT MAX(user_id) from users;

SELECT MAX总是返回一行,因此您的行数总是>0。如果没有行,它可能为null,但您没有检查这一点。