如何添加 lastInsertId()? [复制]

Posted

技术标签:

【中文标题】如何添加 lastInsertId()? [复制]【英文标题】:How do I add lastInsertId()? [duplicate] 【发布时间】:2012-09-19 11:37:12 【问题描述】:

可能重复:Can't get mysql_insert_id() to work

我想在这个函数上使用 lastInsertId() 打印最后插入的 id:

private function adduser() 

    if (!empty($this->error)) return false;

    $params = array(
        ':user_level' => parent::getOption('default-level'),
        ':name'       => $this->name,
        ':email'      => $this->email,
        ':username'   => $this->username,
        ':password'   => parent::hashPassword($this->password)
    );

    parent::query("INSERT INTO `login_users` (`user_level`, `name`, `email`, `username`, `password`)
                    VALUES (:user_level, :name, :email, :username, :password);", $params);

    $shortcodes = array(
        'site_address'  =>  SITE_PATH,
        'full_name'     =>  $this->name,
        'username'      =>  $this->username,
        'email'         =>  $this->email,
        'password'      =>  $this->password
    );

    $subj = parent::getOption('email-add-user-subj');
    $msg = parent::getOption('email-add-user-msg');
    $cid = parent::lastInsertId();

    if(!parent::sendEmail($this->email, $subj, $msg, $shortcodes))
        $this->error = _('ERROR. Mail not sent');

    $this->result = "<div class='alert alert-success'>" . sprintf(_('Successfully added user <b>%s</b> to the database. Credentials sent to user.'), $cid) . "</div>";


我已经添加了这个:

$cid = parent::lastInsertId();

然后在此处添加$cid

$this->result = "<div class='alert alert-success'>" . sprintf(_('Successfully added user <b>%s</b> to the database. Credentials sent to user.'), $cid) . "</div>";

但我不断得到:

Fatal error: Call to undefined method Generic::lastInsertId() in

数据库连接如下所示:

public function dbConn() 

    include(dirname(__FILE__) . '/config.php');

    try 
        self::$dbh = new PDO("mysql:host=$host;dbname=$dbName", $dbUser, $dbPass);
        self::$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
     catch (PDOException $e) 
        return '<div class="alert alert-error">'._('Database error: '). $e->getMessage() . '</div>';
    



我应该如何正确添加 lastInsertId() 的任何想法?

【问题讨论】:

您为 DB 使用的框架/类是什么? raina77ow,是的,因为我发现这与 mysql_insert_id() 无关,因为这是 PDO。 raina77ow,对不起,这不是 Magento,这是一个用户登录脚本,我试图通过添加 lastInsertId() 进行修改,但我无法让它工作。 您基本上需要的是在您的连接对象上调用 lastInsertId() 方法。从显示的 sn-ps 看起来它存储在 self::$dbh 中,因此可能应该像这样使用它:self::$dbh-&gt;lastInsertId() raina77ow,谢谢一百万,它奏效了,哇。你是我的英雄,再次感谢。 【参考方案1】:

替换

$cid = parent::lastInsertId();

self::$dbh->lastInsertId();

...因为(看起来)您的连接对象存储在我们正在讨论的这个匿名类的dbh 字段中。

【讨论】:

【参考方案2】:

LastInsertID 是 PDO 类的方法。

您在 Generic 类上调用它,该类没有方法 LastInsertID();

【讨论】:

那我该如何正确称呼它呢? php.net/manual/en/pdo.lastinsertid.php 我试过 $cid = PDO::lastInsertId();而是得到了这个错误:致命错误:非静态方法 PDO::lastInsertId() 不能被静态调用,假设 $this 来自不兼容的上下文 in 不清楚您的代码中是否有可用的 PDO 对象?

以上是关于如何添加 lastInsertId()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

通过 lastInsertId() 获取 ID 是不是安全? [复制]

PDO 的 LastInsertID 会破坏 AWS 复制吗?

在这种情况下如何使用 lastInsertId?

SQLAlchemy添加数据

为什么PDO的Oracle驱动程序不实现lastInsertId()?

Golang:如何使用创建触发器从表中获取 LastInsertId?