我正在尝试获取数据库中的最后一个插入的ID,并使用它来插入另一个记录,在这种情况下,具有特定记录的关联图像。注意:我正在使用MVC,这在模型中。这两个操作应该在彼此之后直接进行,即:用户没有看到同时发生两种不同的插入物。
这是初始插入:
public function addAccom($data)
{
$this->db->query("INSERT INTO `accommodation` (`name`, `description`, `category`, `slug`) VALUES (:name, :description, :category, :slug)");
$this->db->bind(":name", $data['name']);
$this->db->bind(":description", $data['description']);
$this->db->bind(":category", $data['category']);
$this->db->bind(":slug", $data['slug']);
if($this->db->execute()){
$id = $this->db->lastInsertId();
return true;
} else {
return false;
}
}
我不知道这条线在上面是否正确:
$id = $this->db->lastInsertId();
此插入后,我需要使用该ID插入更多记录。
我应该尝试在与此相同的查询中运行另一个数据库查询还是创建另一个查询?
这是我的第二个查询:
public function addAccomPic($data)
{
$this->db->query("INSERT INTO `accom_pics` (`accom_id`, `pic_name`) VALUES (:accom_id, :pic_name)");
$this->db->bind(":accom_id", $data['accom_id']);
$this->db->bind(":pic_name", $data['pic_name']);
if($this->db->execute()) {
return true;
} else {
return false;
}
}
数据库:
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $dbh; // Is this the same as $link ?
private $stmt;
private $error;
public function __construct() {
$dsn = "mysql:host=$this->host;dbname=$this->dbname";
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try {
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
} catch(PDOexception $e) {
$this->error = $e->getMessage();
echo $this->error;
}
}
我看到的第一件事是$ id是局部变量。尝试将其设置为全局:
public $id = null;
public function addAccom($data)
{
$this->id = $this->db->lastInsertId();
}