$ this-> db-> insert_id()在mysql codeigniter中不起作用

时间:2011-08-04 13:22:39

标签: mysql codeigniter

我只是想从codeiginitor获取mysql表中最新的自动生成密钥。但它并没有起作用。我试过这段代码 $this->db->insert_id() 以及
$this->db->mysql_insert_id()
我收到以下错误
Severity: Notice
Message: Undefined property: CI_DB_mysql_driver::$insert_id

是不支持mysql的insert_id函数?我们怎样才能使它发挥作用?

12 个答案:

答案 0 :(得分:11)

CodeIgniter的insert_id()只会返回insert()的ID。除非在调用函数之前执行$this->db->insert('table', $data);之类的操作,否则它将无法返回ID。

答案 1 :(得分:6)

仅使用此语法

$last_id = $this->db->insert_id();

return $last_id; 

答案 2 :(得分:5)

这是我尝试插入数据并获取插入ID的代码,

$this->db->insert('table_name',$data); $id = $this->db->mysql_insert_id();

这对我不起作用。我使用DB Driver作为“mysql”。然后我安装了“mysqli”并更改了database.php中的数据库驱动程序名称,如 $db['default']['dbdriver'] = 'mysqli';
现在它对我来说很好。

答案 3 :(得分:2)

请检查您的表格是否没有自动递增,主要字段然后$this->db->insert_id();将不会返回任何内容。

答案 4 :(得分:1)

假设您正在使用活动记录模式 这应该工作
$this->db->insert_id()

答案 5 :(得分:1)

我遇到了同样的问题,并找到了一个包含此链接的解决方案:http://kedyr.wordpress.com/2012/10/03/codeigniter-insert_id/

解决方案不是一个正确的解决方案,因为它只是一种通过使用本机sql来解决问题的方法,使用codeigniter方法"查询"并处理本机sql回调。

    $this->db->insert('references', $data);
    $query = $this->db->query('SELECT LAST_INSERT_ID()');
    $row = $query->row_array();
    $LastIdInserted = $row['LAST_INSERT_ID()'];

答案 6 :(得分:0)

试试这个:

class UserResource(ModelResource):
    class Meta:
        fields = ['username', 'password']
        allowed_methods = ['post']
        resource_name = 'user'
        include_resource_uri = False

    def override_urls(self):
       return [
           url(r"^(?P<resource_name>%s)/login%s$" %
               (self._meta.resource_name, trailing_slash()),
               self.wrap_view('login'), name="api_login"),]

    def login(self, request, **kwargs):
       self.method_check(request, allowed=['post'])
       data = self.deserialize(request,
                               request.body,
                               format=request.META.get('CONTENT_TYPE',
                                                    'application/json'))

       # Get Username and Password.
       username = data.get('username', '')
       password = data.get('password', '')

      user = authenticate(username=username, password=password)
      if user:
         if user.is_active:
            login(request, user)
            return self.create_response(request, {
              'success': True
            })
         else:
            return self.create_response(request, {
              'success': False,
              'message': 'User is not active.'               
            }, HttpForbidden )
      else:
         return self.create_response(request, {
           'success': False,
           'message': 'Username or Password is Invalid.'
         }, HttpUnauthorized )

而不是

$id = $this->db->insert_id()

答案 7 :(得分:0)

试试这个

def check_user_uniqueness
  if EventLog.where("start_at::date = ? AND id <> ? AND user_id = ?",
    start_at.to_date, id, user_id).count > 0
    errors.add(:user_id, "isn't available on this date")
  end
end

答案 8 :(得分:0)

如果你有这样的代码,你的代码将会起作用:

var $table = 'your table name'
$this->db->insert($this->table,$data1);
        return $this->db->insert_id();

CodeIgniter的insert_id()只会返回一个insert()的ID,如前所述,你也不要忘记在database.php中设置数据库驱动程序名称,如

$db['default']['dbdriver'] = 'mysqli';

答案 9 :(得分:0)

// Store data into array
$data=array('name'=>'Rudra','email'=>'test@gmail.com');

//Insert Data Query
$this->db->insert('tableName',$data);

// Storing id into varialbe
$id = $this->db->insert_id();
return $id;

答案 10 :(得分:0)

// insert data
$data=array("name"=>"vijay");
$this->db->insert("table_name",$data);
$insert_id= $this->db->insert_id();

答案 11 :(得分:-1)

如果您使用ajax插入数据,然后打印输出,您将获得响应中的id,或者如果您使用核心codeigniter方法,则使用下面的代码。

$last_id = $this->db->insert_id();
return $last_id;