我遇到了一个问题。我的框架在 PHP 5.3.0 中运行得非常好。我将 PHP 版本升级到 PHP 5.4.x 后,发现我的框架的某些部分出现了一些问题。
PHP 版本升级后,PDO lastInsterId()
总是返回 0
。
我有一个名称为 id
的自增字段。它可以正常地向数据库添加数据。
由于某些原因,我始终无法获取最后插入的 id,而会得到 0。
这是我的代码:
databaseobjects.php
public static function create () {
global $db;
$attributes = self::sanitize(static::$fields);
$sql = "INSERT INTO ".PREFIX.static::$table_name." (";
$sql .= join(", ", array_keys($attributes));
$sql .= ") VALUE (:";
$sql .= join(", :", array_keys($attributes));
$sql .= ")";
return ($db->crudQuery($sql, $attributes)) ? true : false;
}
public static function lastInsertID () {
global $db;
return $db->handler->lastInsertId();
}
database.php
public function crudQuery($sql, $data) {
$sth = $this->handler->prepare($sql);
return $sth->execute($data);
}
首先调用create()
方法,然后调用crudQuery()
方法。
如我之前所述,我可以成功地将数据添加到MySQL数据库中。
遗憾的是,当我调用lastInsterID()
方法时,它总是返回0。
如果你能在我用SQL查询获取最后一个ID之前帮我解决这个问题,我将不胜感激(:
static
关键字。你是如何调用这些方法的? - Pekkadatabaseobjects.php
。这样,在编码时我就不会重复自己。 - RevenantlastInsertId()
是针对 连接 而不是 表 的唯一标识符 - 在调用create()
和lastInsertID()
之间是否执行了其他数据库查询?还要注意,如果在事务中执行查询并在COMMIT
后查询 id,则lastInsertId()
报告0
。 - DaveRandomlastInsertID()
方法之前正确地运行了INSERT
查询。我还尝试过return $db->handler->lastInsertId('id');
,但没有成功。 - Revenant