没有返回正确的INT

时间:2012-01-29 19:25:41

标签: 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   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;      
    } 
}

2 个答案:

答案 0 :(得分:3)

SELECT MAX(blah) FROM bleh;

始终返回1行。如果不存在任何行,则返回一个NULL值作为值的行。

所以,你需要这样做:

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

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

答案 1 :(得分:1)

问题是你的select_max('user_id')产生类似

的东西
SELECT MAX(user_id) from users;

SELECT MAX始终返回一行,因此您的行数始终为>如果没有行,它可能为null,但你没有检查它。