我有一个理论上很简单的脚本,我试图在开发DB2数据库上选择关系数据,然后插入到单独的生产db2服务器中(在此过程中,在生产端创建新的ID和关系)。
因此,在此脚本中,我:
问题是该脚本实际上已成功运行,但是随着它的运行,它只是增加了一个,因此即使它正确地插入了每个ITEM,它最终也只是在数据库中获得了每个子项并存储了原始(第一行)的ID。实例:
我的第一个ITEM选择返回ID1204。当我让它运行多个项目时,我的ITEM表显示了ID为1204、1205、1206和1207的记录
是的,但是当我查看subITEMS表时,我有10条subITEM记录,所有记录的itemID为1204。因此,它对于ITEMS的每次迭代都获得了正确的子项,但只插入了第一个newID变量。
我在这里做错了什么:
if($DB2connDEV && $DB2connPROD){
$getDevItems = "
SELECT
itemt_ID,
DESCRIPTION
FROM itemt
";
$stmt = odbc_exec($DB2connDEV, $getDevItems);
while($gettingDevItems = odbc_fetch_array($stmt)){
$rows[] = $gettingDevItems;
}
foreach($rows as $row){
$prepInsert = odbc_prepare($DB2connPROD, "INSERT INTO itemt (itemt_id, description) VALUES(?,?)");
$originalID = $row['itemt_ID'];
$description = $row['DESCRIPTION'];
$insertTable = odbc_execute($prepInsert, array($description));
//Get newly created ID
$getIdentity = "SELECT IDENTITY_VAL_LOCAL() AS LASTID FROM SYSIBM.SYSDUMMY1";
$stmt = odbc_exec($DB2connPROD, $getIdentity);
$row = odbc_fetch_array($stmt);
$newID = $row['LASTID'];
if($newID) {
echo "Last Insert ID is : " . $newID . "\n";
} else {
echo "No Last insert ID.\n";
}
//Get subItems and insert
$getSubItems = "SELECT NAME, DESCRIPTION
FROM SUBITEMT
WHERE itemt_ID = $originalID";
$selectSubItems = odbc_exec($DB2connDEV, $getSubItems);
while($gettingSubItems = odbc_fetch_array($selectSubItems)){
$subItemRows[] = $gettingSubItems;
}
foreach($subItemRows as $subItemRow){
$subItemPrepInsert = odbc_prepare($DB2connPROD, "INSERT INTO subitemt (itemt_id, NAME, DESCRIPTION) VALUES(?,?,?)");
$subItemName = $subItemRow['NAME'];
$subItemDescription = $subItemRow['DESCRIPTION'];
$subtaskInsertExec = odbc_execute($subtaskPrepInsert, array($newID, $subItemName, $subItemDescription));
//get newly created ID for subitem
$getsubtaskID = "SELECT IDENTITY_VAL_LOCAL() AS LASTID FROM SYSIBM.SYSDUMMY1";
$subtaskIDSTMT = odbc_exec($DB2connPROD, $getsubtaskID);
$newsubItemRow = odbc_fetch_array($subtaskIDSTMT);
$newSubItemID = $newsubItemRow['LASTID'];
if($newSubItemID) {
echo "Last Insert subItem ID is : " . $newSubItemID . "\n";
} else {
echo "No Last insert subItem ID.\n";
}
}
}
odbc_close($DB2connPROD);
odbc_close($DB2connDEV);
}
我有一个理论上很简单的脚本,在这里我试图在开发DB2数据库上选择关系数据,然后插入到单独的生产db2服务器中(创建新的ID ...
问题是您没有在主循环的迭代之间清除$subItemRows
。因此,每次您将新的子项目添加到先前迭代的子项目中。