2015-07-13 82 views
3

我想從我的'用戶'表中獲取自動遞增ID,當新用戶註冊並能夠使用該ID用於另一個查詢我有權在用戶插入'用戶的表格。使用insert_id獲取自動增量ID

我想在我的'payment_status'表中爲'user_id'使用'users'表的'id'。我正嘗試使用insert_id函數的不同方法,但我無法在第一次查詢時獲取該ID。即使這樣,當我能夠將其轉移時,我不知道如何從中獲得它並將其用於我正在嘗試做的事情。任何人都可以提供一些如何做到這一點的指導?

if($validation->passed()) { 
      $user = new User(); 

      $salt = Hash::salt(32); 

      try { 
       $user->create(array(
        'firstname' => Input::get('firstname'), 
        'lastname' => Input::get('lastname'), 
        'email' => Input::get('email'), 
        'phone_number' => Input::get('phone_number'), 
        'username' => Input::get('username'), 
        'password' => Hash::make(Input::get('password'), $salt), 
        'salt' => $salt, 
        'joined' => date('Y-m-d H:i:s'), 
        'group' => 1, 
        //var_dump($id->insert_id) 
        var_dump(mysqli::$insert_id) 
       )); 
       $success = "You have successfully created an account. We will notify you once the account has been approved. Then you will be able to login."; 
       echo $success; 


//Query to add user's name to payment_status db table 

      if(isset($_POST['submit'])){ 
       $id = (isset($_SESSION['id']) ? $_SESSION['id'] : ""); 
       $user_id = (isset($_SESSION['id']) ? $_SESSION['id'] : ""); 
       $firstname = Input::get('firstname'); 
       $payment_name = "Owes"; 
       $payment_id = 1; 
       $payment_amount = 0; 



      $con = mysqli_connect("localhost","root","","db"); 
      /* check connection */ 
       if (mysqli_connect_errno()) { 
       printf("Connect failed: %s\n", mysqli_connect_error()); 
        exit(); 
       } 
      $stmt = $con->prepare("INSERT INTO payment_status (id, user_id, firstname, payment_name, payment_id, payment_amount) VALUES (?, ?, ?, ?, ?, ?)"); 

       if (false===$stmt) { 
       // Check Errors for prepare 
       die(' Owes DB prepare() failed: ' . htmlspecialchars($con->error)); 
      } 
      $stmt->bind_param('iissii', $id, $user_id, $firstname, $payment_name, $payment_id, $payment_amount); 
       if (false===$stmt) { 
        // Check errors for binding parameters 
        die('Owes DB bind_param() failed: ' . htmlspecialchars($stmt->error)); 
       } 
      $stmt->execute(); 

       if (false===$stmt) { 
        die('execute() failed: ' . htmlspecialchars($stmt->error)); 
       } 
       // Debug 
       var_dump($con->insert_id); 

       // Output: 
       // int(1) 
      } 

更新:用戶類ADDED

<?php 
class User { 
    private $_db, 
      $_data, 
      $_sessionName, 
      $_cookieName, 
      $_isLoggedIn; 

    public function __construct($user = null) { 
     $this->_db = DB::getInstance(); 

     $this->_sessionName = Config::get('session/session_name'); 
     $this->_cookieName = Config::get('remember/cookie_name'); 

     if(!$user) { 
      if(Session::exists($this->_sessionName)) { 
       $user = Session::get($this->_sessionName); 

       if($this->find($user)) { 
        $this->_isLoggedIn = true; 
       } else { 
        // process Logout 
       } 
      } 
     } else { 
      $this->find($user); 
     } 
    } 

    public function update($fields = array(), $id = null) { 

     if(!$id && $this->isLoggedIn()) { 
      $id = $this->data()->id; 
     } 
     //echo $this->_db->update('users', $id, $fields); 

     //if(!$this->_db->update('users', $id, $fields)) { 
      //throw new Exception('There was a problem updating!'); 
     //} 
     try { 
      if(!$this->_db->update('users', $id, $fields)) { 
       throw new Exception('There was a problem updating!'); 
      } 
     } 
      catch(Exception $e) { 
     echo "An error occurred"; 
     throw $e; 
    } 
    finally { 
       //This overrides the exception as if it were never thrown 
     return "\nException erased"; 
    } 
    try { 
    echo asdf(); 
} 
catch(Exception $e) { 
    echo "\nResult: " . $e->getMessage(); 
} 
     //if(!$this->_db->update('users', $id, $fields)) { 
     // throw new Exception('There was a problem updating!')->getMessage(); 
     //} 
    } 

    public function create($fields = array()) { 


     if(!$this->_db->insert('users', $fields)) { 
      throw new Exception('There was a problem creating an account:' . $this->_db->errorMessage()); 

     } 
    } 

    public function find($user = null) { 
     if($user) { 
      $field = (is_numeric($user)) ? 'id' : 'username'; 
      $data = $this->_db->get('users', array($field, '=', $user)); 

      if($data->count()) { 
       $this->_data = $data->first(); 
       return true; 
      } 
     } 
     return false; 
    } 

    public function login($username = null, $password = null, $remember = false) { 

     if(!$username && !$password && $this->exists()) { 
      Session::put($this->_sessionName, $this->data()->id); 
     } else { 
      $user = $this->find($username); 

      if($user) { 
       if($this->data()->password === Hash::make($password, $this->data()->salt)) { 
        Session::put($this->_sessionName, $this->data()->id); 

        if($remember) { 
         $hash = Hash::unique(); 
         $hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id)); 

         if(!$hashCheck->count()) { 
          $this->_db->insert('users_session', array(
           'user_id' => $this->data()->id, 
           'hash' => $hash 
          )); 
         } else { 
          $hash = $hashCheck->first()->hash; 
         } 

         Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry')); 
        } 
        return true; 
       } 
      } 

     } 
     return false; 
    } 

    public function hasPermission($key) { 
     $group = $this->_db->get('groups', array('id', '=', $this->data()->group)); 

     if($group->count()) { 
      $permissions = json_decode($group->first()->permissions, true); 

      if($permissions[$key] == true) { 
       return true; 
      } 
     } 
     return false; 
    } 

    public function exists() { 
     return (!empty($this->_data)) ? true : false; 
    } 

    public function logout() { 

     $this->_db->delete('users_session', array('user_id', '=', $this->data()->id)); 

     Session::delete($this->_sessionName); 
     Cookie::delete($this->_cookieName); 
    } 

    public function data() { 
     return $this->_data; 
    } 
    public function isLoggedIn() { 
     return $this->_isLoggedIn; 
    } 
} 
?> 
+0

你可以返回最後插入的ID在$用戶的末尾 - > create()方法。然後,您可以在嘗試中獲得該值,例如$ lastId = $ user-> create(array(...)) – mongjong

回答

6

您創建查詢

$user->create(array(
'firstname' => Input::get('firstname'), 
'lastname' => Input::get('lastname'), 
'email' => Input::get('email'), 
'phone_number' => Input::get('phone_number'), 
'username' => Input::get('username'), 
'password' => Hash::make(Input::get('password'), $salt), 
'salt' => $salt, 
'joined' => date('Y-m-d H:i:s'), 
'group' => 1,     
)); 
var_dump(mysqli::$insert_id); 

後,您使用mysqli :: $ INSERT_ID或者,也許這將是

var_dump($user->insert_id); 
+1

我得到這個mysqli :: one錯誤致命錯誤:訪問未聲明的靜態屬性:mysqli :: $ insert_id in ...然後與變量'$ user',我得到這個錯誤...注意:未定義的屬性:User :: $ insert_id in ...但它成功註冊用戶,所以它不會破壞代碼,但它返回NULL 。 – Paul

+1

第一個是因爲你不使用mysql類創建用戶,第二個是你使用的框架是什麼? – Rox

+0

這是youtube上的一個。從phpacademy。如果有幫助,我可以在我的問題中發佈我的一些用戶類。 – Paul