使用insert_id获取自动增量ID

时间:2015-07-13 03:04:10

标签: php mysql

我正在尝试从我的'用户'中获取自动增量ID当一个新用户注册并能够将该id用于我将用户插入“用户”之后的另一个查询时表

我想使用'用户'表' id'对于' user_id'在我的' payment_status'表。我正在尝试使用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)
            }

更新:添加了用户类

<?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;
    }
}
?>

1 个答案:

答案 0 :(得分:6)

您应该在创建查询后使用mysqli :: $ insert_id

$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);

或许它会是

var_dump($user->insert_id);