gpt4 book ai didi

php - PDO lastInsertId() 总是返回 0

转载 作者:行者123 更新时间:2023-11-30 21:30:34 29 4
gpt4 key购买 nike

我遇到了一个问题。我的框架在 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();
}

数据库.php

public function crudQuery($sql, $data) {
$sth = $this->handler->prepare($sql);
return $sth->execute($data);
}

首先调用 create() 方法,然后调用 crudQuery() 方法。正如我之前提到的,我可以将数据成功添加到 MySQL 数据库中。不幸的是,当我调用 lastInsterID() 方法时,它总是返回 0。

如果你能在我用 SQL 查询得到最后一个 ID 之前帮助我解决这个问题,我将非常高兴 (:

最佳答案

除了 php/PDO 或您的框架中的错误外,还有两种可能性。 lastInsertId() 在与插入不同的 MySQL 连接上调用,或者您在应用程序/框架中生成 id 并插入它,而不是让 auto_increment 为您生成它。表中哪一列是主键/auto_increment?该列是否包含在 create() 函数的 $attributes 中?

您可以测试 PDO 以确保该部分使用此代码(在新文件中)正常工作:

// Replace the database connection information, username and password with your own.
$conn = new PDO('mysql:dbname=test;host=127.0.0.1', 'user', 'password');

$conn->exec('CREATE TABLE testIncrement ' .
'(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50))');
$sth = $conn->prepare('INSERT INTO testIncrement (name) VALUES (:name)');
$sth->execute([':name' => 'foo']);
var_dump($conn->lastInsertId());
$conn->exec('DROP TABLE testIncrement');

当我运行这个脚本时,输出是

string(1) "1"

关于php - PDO lastInsertId() 总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56476606/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com