我已经使用下面的方法连接到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\u id而不是lastinsertid()尝试了上述所有变体,因为我在一些地方看到了推荐的方法。
还有其他一些事情,我已经浪费了3个小时。返回最后一个插入的id似乎不起作用,我在网上看过很多例子,但是它们的数据库查询方式和我的略有不同。我相信lastinsertid()应该在pdo对象上,我只是不知道如何以设置查询和数据库链接的方式调用它。有人能帮忙吗?
编辑:可能是我没有正确设置mysql数据库吗?该表的主键是id。这就是lastinsertid()如何知道从哪个列获取“id”的方法,而不是从任何其他列?
1条答案
按热度按时间mqxuamgl1#
我想我用过这样的东西。在
execute()
使用在类中定义变量
然后
这样可以确保在执行sql之后检索最后一个insert id。