【发布时间】:2014-02-09 06:02:30
【问题描述】:
我已经构建了一个多维数组,其中包含要插入的表名、列名和值。我将此数组转换为INSERT 命令,然后执行它。在我尝试两次插入同一张表之前,一切都按预期工作。我有一个父表company。数据库中的所有其他 19 个表都包含一个名为 CompanyID 的列,它是一个引用 company 表中的 CompanyID 列的外键。我需要做的是能够两次插入其中一个子表以获得额外的地址或联系该公司的人员。出于某种原因,如果我复制数组以便它应该两次添加到某个表中,它只会插入一次。也不会抛出任何错误。有人可以帮我解决这个问题。
这是数组:
$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 ;
【问题讨论】: