【问题标题】:Fatal error: Call to undefined method PDOStatement::lastInsertId()致命错误:调用未定义的方法 PDOStatement::lastInsertId()
【发布时间】:2016-10-01 17:25:06
【问题描述】:

我为 PDO 连接创建了一个数据库类。插入记录并在收到此错误“致命错误:调用未定义方法 PDOStatement::lastInsertId()”后尝试获取最后一个插入 ID。

数据库类:

class Database {
public static $link = null ;

public static function getLink( ) {
    if ( self :: $link ) {
        return self :: $link ;
    }

    $ini = "config.ini" ;
    $parse = parse_ini_file ( $ini , true ) ;
    $driver = $parse [ "db_driver" ] ;
    $dsn = "${driver}:" ;
    $user = $parse [ "db_user" ] ;
    $password = $parse [ "db_password" ] ;
    $options = $parse [ "db_options" ] ;
    $attributes = $parse [ "db_attributes" ] ;

    foreach ( $parse [ "dsn" ] as $k => $v ) {
        $dsn .= "${k}=${v};" ;
    }

    self :: $link = new PDO ( $dsn, $user, $password, $options ) ;

    foreach ( $attributes as $k => $v ) {
        self :: $link -> setAttribute ( constant ( "PDO::{$k}" )
            , constant ( "PDO::{$v}" ) ) ;
    }

    return self :: $link ;
}

public static function __callStatic ( $name, $args ) {
    $callback = array ( self :: getLink ( ), $name ) ;
    return call_user_func_array ( $callback , $args ) ;
}

} 配置文件config.ini

db_driver=mysql
db_user=username
db_password=password

[dsn]
host=hostname
port=3306
dbname=databasename

[db_options]
PDO::MYSQL_ATTR_INIT_COMMAND=set names utf8

[db_attributes]
ATTR_ERRMODE=ERRMODE_EXCEPTION
############

插入查询的代码:

$pdo = Database::prepare("INSERT INTO customer (first_name, last_name, join_date) VALUES (?, ?, ?)");
$pdo->bindParam(1, $firstName);
$pdo->bindParam(2, $lastName);
$pdo->bindParam(3, $currentDate);
$pdo->execute();
$custId = $pdo->lastInsertId();
$pdo->closeCursor();

提前致谢。

【问题讨论】:

  • 尝试$custId = $link->lastInsertId(); 您从 PDO 对象而不是您的准备对象中获得 lastinsertid。
  • 感谢萨蒂,您的指导。问题已解决,我将其添加到答案中。

标签: php mysql pdo


【解决方案1】:

对象应该是 PDO 才能获取 lastInsertId()。在下面的调用中更正。

$pdo = Database::getLink();
$statement = $pdo->prepare("INSERT INTO customer (first_name, last_name, join_date) VALUES (?, ?, ?)");
$statement->bindParam(1, $firstName);
$statement->bindParam(2, $lastName);
$statement->bindParam(3, $currentDate);
$statement->execute();
$custId = $pdo->lastInsertId();
$statement->closeCursor();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多