Не возвращается правильный INT - PullRequest
0 голосов
/ 29 января 2012

Я пытаюсь выяснить, почему он возвращает 1 как целое число, когда я печатаю max_user_id при первом запуске этой функции, которая существует внутри моей библиотеки.Он должен возвращать 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 ]

3 голосов
/ 29 января 2012
SELECT MAX(blah) FROM bleh;

Всегда возвращает 1 строку. Если строк не существует, возвращается строка с NULL в качестве значения.

Итак, вам нужно сделать:

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

Пожалуйста, скажите мне, что вы не используете это для вставки. Что если два пользователя отправляются на создание одновременно, и оба пытаются создать с ID 7? Автоинкрементные поля существуют по причине.

1 голос
/ 29 января 2012

Проблема в том, что ваш select_max ('user_id') генерирует что-то вроде

SELECT MAX(user_id) from users;

SELECT MAX всегда возвращает строку, поэтому ваш счетчик строк всегда> 0. Он может быть нулевым, если нетстрок, но вы не проверяете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...