【发布时间】:2012-07-31 09:16:20
【问题描述】:
我遇到了一个问题。我的框架在 PHP 5.3.0 上运行良好。我将我的 PHP 版本升级到 PHP 5.4.x,我的框架的某些部分开始出现一些问题。
PHP版本升级后,PDO lastInsterId()总是返回0。
我有一个名为 id 的自动增量字段。
它正在将数据添加到数据库中,没有任何问题。
由于某种原因,我一直将 0 作为最后插入 ID。
这是我的代码;
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 Query 获得最后一个 ID 之前帮助我解决这个问题,我将非常高兴(:
【问题讨论】:
-
我注意到您的方法定义中的
static关键字。 如何调用这些方法? -
数据库中的每个表都有一个类(如果表没有类,我的框架会自动创建它们)。每个数据库表类都扩展到
databaseobjects.php。这样,我在编码时就不会重复自己。 -
记住
lastInsertId()是 connection 而不是 table 独有的 - 您在调用create()和lastInsertID()?另请注意,lastInsertId()报告0如果查询是在事务中执行并且您在COMMIT之后查询 id -
我已经仔细检查了我的查询,并且在运行
lastInsertID()方法之前运行了正确的INSERT查询。我也试过return $db->handler->lastInsertId('id');,但没有成功。
标签: php pdo lastinsertid