Дублирование данных строки в нескольких связанных таблицах.
В php я не смог получить результат от mysqli_insert_id после использования 1-го mysqli_multi_query.
Я успешно запросил следующее с помощью phpmyadmin (вручную заменив unit_id на 1 и $ unit_id1 на 61 (следующий соответствующий)):
CREATE TEMPORARY TABLE tmp
SELECT `unit_id`,
`title`,
`status_id`,
`category_id`,
`tags`,
`access_id`
FROM unit_genData
WHERE `unit_id` = 1;# 1 row affected.ALTER TABLE tmp
DROP COLUMN `unit_id`;# 1 row affected.UPDATE tmp
SET `title` = 'DUPLICATE';# 1 row affected.INSERT INTO unit_genData
SELECT 0,tmp.*
FROM tmp;# 1 row affected.
DROP TABLE tmp;# MySQL returned an empty result set (i.e. zero rows).CREATE TEMPORARY TABLE tmp
SELECT `ad_id`,
`unit_id`,
`ad_title`,
`ad_image`,
`ad_img_caption`,
`ad_brief_desc`,
`ad_btn_text`
FROM unit_promoContent
WHERE `unit_id`=1;# 1 row affected.ALTER TABLE tmp
DROP COLUMN `ad_id`;# 1 row affected.UPDATE tmp
SET `unit_id` = 61;# 1 row affected.INSERT INTO unit_promoContent
SELECT 0,tmp.*
FROM tmp;# 1 row affected.
DROP TABLE tmp;# MySQL returned an empty result set (i.e. zero rows).
Замечания: первый multi_query успешно дублирует первую таблицу … 2-й multi_query зависит от результата mysqli_insert_id.
$sql1 = "CREATE TEMPORARY TABLE tmp
SELECT `unit_id`,
`title`,
`status_id`,
`category_id`,
`tags`,
`access_id`
FROM ".ID_TABLE."WHERE `unit_id` = " . $id . ";
ALTER TABLE tmp
DROP COLUMN `unit_id`;
UPDATE tmp
SET `title` = 'DUPLICATE';
INSERT INTO ".ID_TABLE."SELECT 0,tmp.*
FROM tmp;
DROP TABLE tmp;
";
$result = mysqli_multi_query($dbc,$sql1)
or die(mysqli_error($sql1));
$unit_id1 = mysqli_insert_id($dbc); // Store new unit_id as var // Tab 2 :: Promo Content
$sql2 = "CREATE TEMPORARY TABLE tmp
SELECT `ad_id`,
`unit_id`,
`ad_title`,
`ad_image`,
`ad_img_caption`,
`ad_brief_desc`,
`ad_btn_text`
FROM unit_promoContent
WHERE `unit_id`=" . $id . ";ALTER TABLE tmp
DROP COLUMN `ad_id`;UPDATE tmp
SET `unit_id` = ". $unit_id1 .";INSERT INTO unit_promoContent
SELECT 0,tmp.*
FROM tmp;
DROP TABLE tmp;
";
$result = mysqli_multi_query($dbc,$sql2)
or die(mysqli_error($sql2));
В конце, после множества тестов, я обнаружил, что единственный способ успешно получить unit_id новой строки — это отделить первую mysqli_multi_query
в человека mysqli_query
,
Даже после этого я все же обнаружил, что получаю анализатор, поэтому я переехал mysqli_insert_id
прямо под INSERT
запрос.
Теперь, когда я смог получить новый unit_id, я смог успешно запустить mysqli_multi_query
для следующей дублированной таблицы. тем не мение, Я столкнулся с той же проблемой с включением оставшихся таблиц для дублирования, поэтому я, наконец, обнаружил, что мне нужно разделить все mysqli_multi_query
в человека mysqli_query
,
Смотрите рабочее решение ниже:
НОТА:ID_TABLE
определяется во включенном файле config.php (здесь не показан). Это таблица под названием unit_genData
*$id*
это переменная, которая представляет начальный unit_id
выбранной / проверенной строки для дублирования
$sql1 = "CREATE TEMPORARY TABLE tmp
SELECT `unit_id`,
`title`,
`status_id`,
`category_id`,
`tags`,
`access_id`
FROM ".ID_TABLE."WHERE `unit_id` = " . $id . "";
$result = mysqli_query($dbc,$sql1) or die(mysqli_error($dbc));
$sql2 = "ALTER TABLE tmp
DROP COLUMN `unit_id`";
$result = mysqli_query($dbc,$sql2) or die(mysqli_error($dbc));
$sql3 = "UPDATE tmp
SET `title` = 'DUPLICATE'";
$result = mysqli_query($dbc,$sql3) or die(mysqli_error($dbc));
$sql4 = "INSERT INTO ".ID_TABLE."SELECT 0,tmp.*
FROM tmp";
$result = mysqli_query($dbc,$sql4) or die(mysqli_error($dbc));
$unit_id1 = mysqli_insert_id($dbc); //$dbc->insert_id; // Store new unit_id as var
$sql5 = "DROP TABLE tmp;";
$result = mysqli_query($dbc,$sql5) or die(mysqli_error($dbc));
$data = "Insert_id for TABLE 1: ".$unit_id1.". ";
// Duplicate Table for Tab 2
// Promo Content
$sql6 = "CREATE TEMPORARY TABLE tmp
SELECT `ad_id`,
`unit_id`,
`ad_title`,
`ad_image`,
`ad_img_caption`,
`ad_brief_desc`,
`ad_btn_text`
FROM unit_promoContent
WHERE `unit_id`=" . $id . ";
$result = mysqli_query($dbc,$sql6) or die(mysqli_error($dbc));$sql7 = "ALTER TABLE tmp
DROP COLUMN `ad_id`";
$result = mysqli_query($dbc,$sql7) or die(mysqli_error($dbc));$sql8 = "UPDATE tmp
SET `unit_id` = ". $unit_id1 .";
$result = mysqli_query($dbc,$sql8) or die(mysqli_error($dbc));$sql9 = "INSERT INTO unit_promoContent
SELECT 0,tmp.*
FROM tmp;";
$result = mysqli_query($dbc,$sql9) or die(mysqli_error($dbc));
$sql10 = "DROP TABLE tmp;";
$result = mysqli_query($dbc,$sql10) or die(mysqli_error($dbc));
# ======================================================= #
#...and so on...for the rest of the tables to duplicate...#
# ======================================================= #
mysqli_close($dbc);
Других решений пока нет …