【发布时间】:2021-04-13 12:29:12
【问题描述】:
我想插入一行,同时获取该查询生成的 id。
我只是先对其进行测试,到目前为止,这就是我得到的。
我创建了一个具有这样的数据库配置的类
class Database{
private $host;
...
...
protected function connect(){
$this->host = 'localhost';
...
...
$conn = new mysqli($this->host, ...,);
if ($conn->connect_errno){
echo 'error';
};
return $conn;
}
}
一个用于实际查询的用户类以及我扩展数据库类的位置。
class User extends Database{
function createUser(...,){
$sql = "INSERT INTO t (field) VALUES ('value');";
$this->connect()->query($sql);
return $this->connect()->insert_id;
}
}
我的表中已经插入了数据,但函数返回 0。
注意: 我在 AUTO_INCREMENT 属性的用户表上有我的列 ID。
查询成功但没有返回正确的ID。
我尝试在没有 Database 类的情况下执行此操作,它工作正常,返回查询生成的 ID。
$mysqli = new mysqli('host', ...,);
if(result = $mysqli->query("INSERT INTO t (field) VALUES ('value');")){
return $mysqli->insert_id;
}
【问题讨论】:
-
createUser方法在哪里以及如何使用?你在哪里关闭连接?它返回的是哪个 id(前一个,前两个查询...)? -
当你第二次调用
connect()时,这不是创建一个新的数据库连接吗?如果是这样,那么它不会返回 last-insert-id,因为没有一个 用于该数据库连接。 -
直到你提到它,我才注意到伙计们。这段代码写得不好,也许我会用其他方式。