gpt4 book ai didi

php - 无法让 PHP lastInsertId() 使用此设置

转载 作者:行者123 更新时间:2023-11-29 09:55:45 25 4
gpt4 key购买 nike

我已经使用下面的方式作为我连接到 MySQL 数据库以及查询它的方式有一段时间了。这似乎与我在网上看到的许多示例的设置有点不同。我似乎无法弄清楚如何让 lastInsertId() 使用此设置:

define("DB_HOST", "localhost");
define("DB_NAME", "mydatabase");

$link = new DBLink("username", "password");

class DBLink {

private $host = DB_HOST;
private $dbname = DB_NAME;
private $user;
private $pass;

private $dbConnection;
private $error;

private $sql;

public function __construct($user, $pass) {

$this->user = $user;
$this->pass = $pass;

$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);

try {
$this->dbConnection = new PDO($dsn, $this->user, $this->pass, $options);
}

catch(PDOException $e){
$this->error = $e->getMessage();
echo $this->error;
}
}

public function query($query) {
$this->sql = $this->dbConnection->prepare($query);
}

public function bind($param, $value) {
$this->sql->bindParam($param, $value);
}

public function execute() {
return $this->sql->execute();
}

然后我将向数据库添加一个新行,如下所示:

 $link->query("INSERT INTO users (username, phone, email)
VALUES (:username, :phone, :email)");

$link->bind(':username', $username);
$link->bind(':phone', $phone);
$link->bind(':email', $email);
$link->execute();

添加一行后,我想获取插入到数据库中的行的 id。我试过:

$link->lastInsertId();

$link->$sql->lastInsertId();

用它编写一个单独的函数,然后将该函数放在 DBLink 类中:

$link->getLastID();

public function getLastID() {
return $this->sql->lastInsertId();
}

以及其他疯狂的猜测,例如

 $this->dbConnection->lastInsertId();

我还尝试了使用 insert_id 而不是 lastInsertId() 的所有上述变体,因为我在一些地方看到了推荐的做法。

还有其他一些事情,我在上面浪费了大约 3 个小时。似乎没有什么可以返回最后插入的 id。我在网上查看了很多示例,但它们的数据库查询方式都与我的方式略有不同。我相信 lastInsertId() 应该位于 PDO 对象上,我只是不确定如何以我设置查询和数据库链接的方式调用它。有人可以帮忙吗?

编辑:可能是我没有正确设置 MySQL 数据库吗?该表的主键是 id。 lastInsertId() 就是这样知道从哪一列获取“id”的,而不是从任何其他列获取“id”吗?

最佳答案

我想我用过类似的东西。在execute()中使用

public function execute() {
$this->lastInsertID = null;
$ret = $this->sql->execute();
$this->lastInsertID = $this->dbConnection->lastInsertId();
return $ret;
}

在类中定义变量

private $lastInsertID;

然后

public function getLastID() {
return $this->lastInsertID;
}

这可确保在执行 SQL 后立即检索最后的插入 ID。

关于php - 无法让 PHP lastInsertId() 使用此设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53902401/

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