Я построил две таблицы со следующим 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
вместо предыдущего кода.
С другой стороны, мне нужно добавить третью таблицу, возможно, четвертую таблицу, я думаю, что я повторяю много кода: шаблонное кодирование .
Iхотел бы ваше мнение и совет.