[英]How do an INSERT INTO in more than once table with PDO and MySQL?
我使用以下SQL構建了兩個表:
CREATE TABLE state(
IDstate INTEGER not null auto_increment,
state_name VARCHAR(40) not null,
UNIQUE(state_name),
CONSTRAINT IDstate PRIMARY KEY(IDstate)
)auto_increment=100;
CREATE TABLE city(
IDcity INTEGER not null auto_increment,
city_name VARCHAR(60) not null,
IDstate INTEGER not null,
CONSTRAINT IDcity PRIMARY KEY(IDcity),
CONSTRAINT IDstate FOREIGN KEY(IDstate) REFERENCES state(IDstate)
)auto_increment=100;
我想用PHP-PDO-MySQL創建一個函數,我確定下一個:
$state
, $city
。 我必須避免價值觀的重復。
$dbcon=new PDO('mysql:host=localhost; dbname=hotel','root', ''); $sql = "SELECT IDstate FROM state WHERE state_name=:state_name"; $query = $dbcon->prepare($sql); $query->execute(array(':state_name'=>$state_name)); $array = $query->fetchAll(); if ($query->rowCount() == 0){ $sql = "INSERT INTO state (state_name) VALUES (:state_name);"; $query = $dbcon->prepare($sql); $query->execute(array(':state_name'=>$state_name)); $sql = "INSERT INTO city (city_name, IDstate) VALUES (:city_name, :IDstate);"; $query = $dbcon->prepare($sql); $query->execute(array(':city_name'=>$city_name, ':IDstate'=>$dbcon->lastInsertId())); } else { $IDstate = $array[0]['IDstate']; $sql = "INSERT INTO city (city_name, IDstate) VALUES (:city_name, :IDstate)"; $query = $dbcon->prepare($sql); $query->execute(array(':city_name'=>$city_name, ':IDstate'=>$IDstate)); print_r($query->rowCount()); }
我需要介紹以下選項:
上面的代碼工作正常,但我想對其進行改進。 我正在閱讀的最佳選擇是編寫transaction
而不是先前的代碼。
另一方面,我需要添加第三張表,也許是第四張表,我想我在重復很多代碼: 樣板代碼 。
我希望您的意見和建議。
Transactions
用於實現原子性,一致性,隔離性和持久性(ACID)。 那就是所有insert
語句都應該執行,或者如果其中任何一個失敗,則所有其他語句都應回滾。 我們開始一個事務,然后繼續執行insert
語句,如果在執行所有語句之后沒有出現技術/業務錯誤,則commit
事務,否則rollback
。 如果回滾,則所有插入語句將被取消,該語句在開始transaction
之后執行。 如果這是您想要的,這是一個通過事務進行多次插入的鏈接。
因此,這可能無法完全回答您的問題,但這是我的想法:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.