php - 无法让 PHP lastInsertId() 使用此设置
问题描述
我一直在使用以下方法连接到 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”,而不是任何其他列?
解决方案
我想我用过这样的东西。在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。
推荐阅读
- mysql - 从 n:n 关系中选择一个值
- python - SHAP 解释器识别错误的框架
- python - Python 仅使用请求从 API 调用中获取单词
- automation - 当我在 findElement 方法上使用 appium 时,我有元素实例,但元素没有获得焦点
- django - 在 HTML 中创建动态数量的表单字段并从请求中提取它们(Django)
- javascript - 如何在快递中捕获 4xx 和 5xx 错误?
- python - 跨 QTabWidgets 传递信息/变量的正确方法?
- flutter - 如何在 Flutter 中自定义 Arrow Back 的高度和宽度
- javascript - 通过删除关键字删除即时搜索内容
- python - Django显示所有对象和foreach对象所有兼容对象