【发布时间】:2014-11-22 06:36:49
【问题描述】:
项目:
跨多个相关表的重复行数据。
问题:
在 php 中,使用第一个 mysqli_multi_query 后,我似乎无法从 mysqli_insert_id 获得 id 结果。
状态:
我已经使用 phpmyadmin 成功查询了以下内容(手动将 unit_id 替换为 1,将 $unit_id1 替换为 61(下一个对应)):
PHPMYADMIN
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).
PHP
注意:第一个 multi_query 成功复制了第一个表...第二个 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));
【问题讨论】:
-
这个输出什么?
mysqli_insert_id($dbc); -
@Hanky웃Panky 按照您的要求编辑了 ajax 以从
mysqli_insert_id($dbc)获取输出。"Commands out of sync; you can't run this command now" -
尝试不使用ajax直接运行此代码,以便您可以先调试服务器端。可能是非常小的东西。检查该函数是否返回 false?
-
@Hanky웃Panky 所以我使用以下 errorAlert 函数
function errorAlert(e, jqxhr) {alert("Your request was not successful: " + jqxhr);};运行了另一个测试。产生的错误警报说parseerror。请注意,我仍然成功复制了第一个 mysqli_multi_query。 -
@Hanky웃Panky 只是想感谢您的建议。有人不时将这些反弹回来意味着很多。我通过将
mysqli_multi_query分成单独的查询找到了答案。似乎是我可以抓住mysqli_insert_id的唯一方法。我已经添加了我设法开始工作的答案。
标签: php mysql phpmyadmin mysqli-multi-query