Я построил многомерный массив, который содержит имя таблицы, имя столбца и значения, которые нужно вставить. Я преобразовываю этот массив в команду INSERT
, а затем выполняю его. Все работает по назначению, пока я не попытался дважды вставить в ту же таблицу. У меня есть родительская таблица company
. Все остальные 19 таблиц в базе данных содержат столбец с именем CompanyID
, который является внешним ключом, который ссылается на столбец CompanyID
в таблице company
. Что мне нужно сделать, так это возможность вставить одну из дочерних таблиц дважды для дополнительного адреса или связаться с людьми для этой компании. По какой-то причине, если я дублирую массив так, чтобы он дважды добавлялся в определенную таблицу, он будет вставляться только один раз. Ошибок не возникает. Может кто-нибудь поможет мне разобраться в этом.Данные не вставлены в базу данных с внешним ключом
Вот массив:
$surveyResults = array(
'additionallocations' => array(
'CompanyID' => $CompanyID,
'Address' => $Address,
'City' => $City,
'State' => $State,
'Zip' => $Zip,
'Country' => $Country,
),
'sales' => array(
'CompanyID' => $CompanyID,
'FirstName' => $FirstName,
'LastName' => $LastName,
'Email' => $Email,
'Phone' => $Phone
),
'owner' => array(
'CompanyID' => $CompanyID,
'FirstName' => $FirstName,
'LastName' => $LastName,
'Email' => $Email,
'Phone' => $Phone
),
'decisionmaker' => array(
'CompanyID' => $CompanyID,
'FirstName' => $FirstName,
'LastName' => $LastName,
'Email' => $Email,
'Phone' => $Phone
),
'decisionmaker' => array(
'CompanyID' => $CompanyID,
'FirstName' => $FirstName,
'LastName' => $LastName,
'Email' => $Email,
'Phone' => $Phone
)
);
Примечание decisionmaker
указан дважды. Это должно вставить в базу данных идентичную информацию, но она только вставляет один раз. Я даже пытался жестко кодировать последние значения decisionmaker
, поэтому они все разные, кроме CompanyID
, и он все равно не будет вставляться.
Ниже приведено, как я создаю инструкцию SQL и выполняю ее.
foreach($surveyResults as $key => $table){
$sql1 = null;
$keys = array_keys($table);
$values = null;
$x = 1;
foreach($table as $row => $value) {
$values .= "'$value'";
if($x < count($keys)) {
$values .= ', ';
}
$x++;
}
$sql1 = $conn->prepare("INSERT INTO {$key} (`" . implode('`, `', $keys) . "`) VALUES ({$values});");
$sql1->execute();
echo $CompanyID;
echo "Successful <br/>";
}
Таблица Создание запроса:
CREATE TABLE IF NOT EXISTS `decisionmaker` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`CompanyID` int(3) NOT NULL,
`FirstName` varchar(30) NOT NULL,
`LastName` varchar(30) NOT NULL,
`Email` varchar(50) NOT NULL,
`Phone` varchar(15) NOT NULL,
PRIMARY KEY (`id`),
KEY `CompanyID` (`CompanyID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=24 ;
--
-- Constraints for dumped tables
--
--
-- Constraints for table `decisionmaker`
--
ALTER TABLE `decisionmaker`
ADD CONSTRAINT `DecisionMaker_ibfk_1` FOREIGN KEY (`CompanyID`) REFERENCES `company` (`CompanyID`) ON DELETE CASCADE ON UPDATE CASCADE;
Это таблица свалка для компании:
CREATE TABLE IF NOT EXISTS `company` (
`CompanyID` int(3) NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
`Address` varchar(50) NOT NULL,
`City` varchar(50) NOT NULL,
`State` varchar(30) NOT NULL,
`Zip` int(5) NOT NULL,
`Country` varchar(20) NOT NULL,
`Website` varchar(50) NOT NULL,
`NOL` int(2) NOT NULL DEFAULT '1',
PRIMARY KEY (`CompanyID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=35 ;
Просто разочарование :) – Yamaha32088
Спасибо большое, я бы дал вам пятерку прямо сейчас, если бы мог – Yamaha32088