我试图在数据库中获取最后一个插入的id并使用它来插入另一个记录,在这种情况下,是与特定记录相关联的图像。注意:我使用的是MVC,这是在模型中。这两个操作应该在彼此之后直接发生,即:用户没有看到同时发生了2个不同的插入。
这是初始插入:
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将更多记录插入另一个表中。
我应该尝试在与此相同的查询中运行另一个db查询还是创建另一个查询?
这是我的第二个查询:
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;
}
}
答案 0 :(得分:0)
我看到的第一件事是,它的$ id是一个局部变量。尝试将其设置为全局:
public $id = null;
public function addAccom($data)
{
$this->id = $this->db->lastInsertId();
}