Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 没有返回正确的整数_Php_Codeigniter - Fatal编程技术网

Php 没有返回正确的整数

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

我试图弄明白为什么在我第一次运行库中的这个函数时,当我打印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;      
    } 
}
始终返回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行,而不是一个数值最大值。哦,好吧,我在这个表中已经有一个自动递增的行,既然如此,当表为空时,我应该用什么来代替最大值。既然它为空,我应该用什么来代替最大值呢