插入后获取最后一个ID(始终返回0)

时间:2017-06-09 05:28:24

标签: php

我有一个像这样的Sql类:

        class Sql extends PDO {
            private $connection;
            public function __construct() {
                $this->connection = new PDO("mysql:host=localhost;dbname=myDB", "root", "root");
            }

 (...)

然后我尝试使用另一个类“user.php”在我的数据库中插入数据。使用“getConection”(sql类方法)。像这样:

class User {
    private $iduser;
    private $deslogin;
    private $despassword;
    private $datecad;

    (getters & setters)

public function insert() { //query & select are a SQL class method
        $sql = new Sql();
        $sql->query("INSERT INTO tb_users (deslogin, despassword) VALUES (:LOGIN, :PASS))", array(
            ':LOGIN'=>$this->getDeslogin(),
            ':PASS'=>$this->getDespassword()
        ));

            echo $sql->getConnection()->lastInsertId(); //getConnection is a Sql Class method that returns the private connection.
    }

为什么我的回声总是返回0?

1 个答案:

答案 0 :(得分:4)

这是因为您需要相同的连接对象关于插入查询以获取最后插入的ID ,但您正在创建新连接以获取最后插入的ID。这就是为什么你总是得到0的结果。

参见参考资料:

http://php.net/manual/en/pdo.lastinsertid.php#120618

修改

从您的代码中引用insert中的问题您是否标记有一个额外的结束括号

将您的代码更改为:

$sql->query("INSERT INTO tb_users (deslogin, despassword) VALUES (:LOGIN, :PASS)", array(
            ':LOGIN'=>$this->getDeslogin(),
            ':PASS'=>$this->getDespassword()
        )); //<------there must be only one bracket after::LOGIN, :PASS