douchenchepan6465 2014-06-26 03:08
浏览 407
已采纳

使用PDO返回上次插入ID

I have this Class and would like to extend to return the ID of the last inserted Row but I keep getting this error:

Fatal error: Call to undefined method PDOStatement :: lastInsertId () on line 49

My Code:

class DB {
public static $instance = null;

private     $_pdo = null,
            $_query = null,
            $_error = false,
            $_results = null,
            $_count = 0,
            $_lastID = 0;

private function __construct() {
    try {
        $this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host'). ';
                dbname=' . Config::get('mysql/db') . ';
                charset=utf8',
                Config::get('mysql/username'),
                Config::get('mysql/password')
            );
    } catch(PDOExeption $e) {
        die($e->getMessage());
    }
}

public static function getInstance() {
    if(!isset(self::$instance)) {
        self::$instance = new DB();
    }
    return self::$instance;
}

public function query($sql, $params = array()) {

    $this->_error = false;

    if($this->_query = $this->_pdo->prepare($sql)) {
        $x = 1;
        if(count($params)) {
            foreach($params as $param) {
                $this->_query->bindValue($x, $param);
                $x++;
            }
        }

        if($this->_query->execute()) {
            $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
            $this->_count = $this->_query->rowCount();
            $this->_lastID = $this->_query->lastInsertId(); // <- ERRO
        } else {
            $this->_error = true;
        }
    }

    return $this;
}
  • 写回答

1条回答 默认 最新

  • doushi7394 2014-06-26 03:19
    关注

    According to the PHP docs, lastInsertId is a method of the pdo object, not the stmt object (which you are referencing via $this->_query). Try this:

    $this->_lastID = $this->_pdo->lastInsertId();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵