[英]php multiple mysql inserts
我想從我的數據庫的一個表中讀取數據(從頁面中選擇SELECT),並根據INSERT將它們復制到多個表中。 當我復制到一個或另一個表時,我的腳本工作正常,但是當我像下面那樣運行它時,它只會將數據復制到第一個表中。 你能幫助我嗎?
<?php
// Pripojenie na databazu s overenim pripojenia
$con = mysql_connect('localhost:8501' , 'root', '');
if(!$con) {
die("Nepripojene ".mysql_error());
}
// Vyber databazy ikarus2 s overenim vyberu
$db = mysql_select_db('ikarus2',$con);
if(!$db) {
die('Ziadny pristup k db ikarus2!'.mysql_error());
}
// MySQL SELECT from pages
$result = mysql_query('SELECT uid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage,
t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id,
title, hidden, starttime, endtime, deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email,
tx_impexp_origuid, tx_realurl_pathsegment, doktype, url, urltype, shortcut, shortcut_mode, t3ver_move_id, sorting,
layout, fe_group FROM pages',$con);
// MySQL INSERT into pages_language_overlay
while ($row = mysql_fetch_array($result)){
$insertoverlay = "INSERT INTO pages_language_overlay( pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage,
t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id, sys_language_uid, title, hidden, starttime, endtime,
deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email, tx_impexp_origuid, tx_realurl_pathsegment,
doktype, url, urltype, shortcut, shortcut_mode)
VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row[4]','$row[5]','$row[6]','$row[7]','$row[8]',
'$row[9]','$row[10]','$row[11]','$row[12]','5', '$row[13]','$row[14]','$row[15]','$row[16]','$row[17]','$row[18]',
'$row[19]','$row[20]','$row[21]','$row[22]','$row[23]','$row[24]','$row[25]','$row[26]','$row[27]','$row[28]',
'$row[29]','$row[30]','$row[31]','$row[32]')";
mysql_query($insertoverlay,$con);
}
// MySQL INSERT into tt_content
while ($row = mysql_fetch_array($result)){
$insertcontent = "INSERT INTO tt_content( pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, t3ver_count,
t3ver_tstamp, t3ver_move_id, t3_origuid, tstamp, crdate, cruser_id, hidden, sorting, media, layout,
deleted, starttime, endtime, fe_group, sys_language_uid, tx_impexp_origuid)
VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row [4]','$row[5]','$row[6]','$row[7]','$row[8]',
'$row[33]','$row[9]','$row[10]','$row[11]','$row[12]','$row[14]','$row[34]','$row[20]','$row[35]','$row[17]',
'$row[15]','$row[16]','$row [36]','5','$row[26]')";
mysql_query($insertcontent,$con);
}
?>
在執行第二個while循環之前,請嘗試使用mysql_data_seek()
:
mysql_data_seek($result, 0);
記錄集$result
的指針需要重置為零,否則它仍然會指示它在結尾處。
要么
首先將所有記錄存儲在一個數組中,然后執行foreach將數據插入數據庫
我認為多個while
循環會導致問題。 試一試
while ($row = mysql_fetch_array($result)){
$insertoverlay = "INSERT INTO pages_language_overlay( pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage,
t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id, sys_language_uid, title, hidden, starttime, endtime,
deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email, tx_impexp_origuid, tx_realurl_pathsegment,
doktype, url, urltype, shortcut, shortcut_mode)
VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row[4]','$row[5]','$row[6]','$row[7]','$row[8]',
'$row[9]','$row[10]','$row[11]','$row[12]','5', '$row[13]','$row[14]','$row[15]','$row[16]','$row[17]','$row[18]',
'$row[19]','$row[20]','$row[21]','$row[22]','$row[23]','$row[24]','$row[25]','$row[26]','$row[27]','$row[28]',
'$row[29]','$row[30]','$row[31]','$row[32]')";
mysql_query($insertoverlay,$con);
$insertcontent = "INSERT INTO tt_content( pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, t3ver_count,
t3ver_tstamp, t3ver_move_id, t3_origuid, tstamp, crdate, cruser_id, hidden, sorting, media, layout,
deleted, starttime, endtime, fe_group, sys_language_uid, tx_impexp_origuid)
VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row [4]','$row[5]','$row[6]','$row[7]','$row[8]',
'$row[33]','$row[9]','$row[10]','$row[11]','$row[12]','$row[14]','$row[34]','$row[20]','$row[35]','$row[17]',
'$row[15]','$row[16]','$row [36]','5','$row[26]')";
mysql_query($insertcontent,$con);
}
1.- 不要使用mysql_ *函數,不推薦使用,使用PDO或mysqli_ *函數
2.-我認為你不太了解mysql_fetch_array
,這個函數返回下一行數據並將指針移動到下一條記錄,因此,在第二個while循環中mysql_fetch_array
將返回false
因此,您需要在while / loop中執行兩個insert語句:
// MySQL INSERT into pages_language_overlay
while ($row = mysql_fetch_array($result)){
$insertoverlay = "INSERT INTO pages_language_overlay( pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage,
t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id, sys_language_uid, title, hidden, starttime, endtime,
deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email, tx_impexp_origuid, tx_realurl_pathsegment,
doktype, url, urltype, shortcut, shortcut_mode)
VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row[4]','$row[5]','$row[6]','$row[7]','$row[8]',
'$row[9]','$row[10]','$row[11]','$row[12]','5', '$row[13]','$row[14]','$row[15]','$row[16]','$row[17]','$row[18]',
'$row[19]','$row[20]','$row[21]','$row[22]','$row[23]','$row[24]','$row[25]','$row[26]','$row[27]','$row[28]',
'$row[29]','$row[30]','$row[31]','$row[32]')";
mysql_query($insertoverlay,$con);
$insertcontent = "INSERT INTO tt_content( pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, t3ver_count,
t3ver_tstamp, t3ver_move_id, t3_origuid, tstamp, crdate, cruser_id, hidden, sorting, media, layout,
deleted, starttime, endtime, fe_group, sys_language_uid, tx_impexp_origuid)
VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row [4]','$row[5]','$row[6]','$row[7]','$row[8]',
'$row[33]','$row[9]','$row[10]','$row[11]','$row[12]','$row[14]','$row[34]','$row[20]','$row[35]','$row[17]',
'$row[15]','$row[16]','$row [36]','5','$row[26]')";
mysql_query($insertcontent,$con);
}
該計划結構不合理。 當控件進入第二個循環時,結果集已經完全消耗。 相反,將它們放在同一個循環中以解決您遇到的直接問題:
// MySQL INSERT into pages_language_overlay
while ($row = mysql_fetch_array($result)){
$insertoverlay = "INSERT INTO pages_language_overlay( pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage,
t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id, sys_language_uid, title, hidden, starttime, endtime,
deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email, tx_impexp_origuid, tx_realurl_pathsegment,
doktype, url, urltype, shortcut, shortcut_mode)
VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row[4]','$row[5]','$row[6]','$row[7]','$row[8]',
'$row[9]','$row[10]','$row[11]','$row[12]','5', '$row[13]','$row[14]','$row[15]','$row[16]','$row[17]','$row[18]',
'$row[19]','$row[20]','$row[21]','$row[22]','$row[23]','$row[24]','$row[25]','$row[26]','$row[27]','$row[28]',
'$row[29]','$row[30]','$row[31]','$row[32]')";
mysql_query($insertoverlay,$con);
$insertcontent = "INSERT INTO tt_content( pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, t3ver_count,
t3ver_tstamp, t3ver_move_id, t3_origuid, tstamp, crdate, cruser_id, hidden, sorting, media, layout,
deleted, starttime, endtime, fe_group, sys_language_uid, tx_impexp_origuid)
VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row [4]','$row[5]','$row[6]','$row[7]','$row[8]',
'$row[33]','$row[9]','$row[10]','$row[11]','$row[12]','$row[14]','$row[34]','$row[20]','$row[35]','$row[17]',
'$row[15]','$row[16]','$row [36]','5','$row[26]')";
mysql_query($insertcontent,$con);
}
?>
INSERT INTO destTable (col1, col2, col3)
SELECT srcCol1, srcCol2, srcCol3 FROM srcTable;
這樣可能更快 :數據不需要傳送到運行PHP代碼的服務器,而是返回到數據庫 - 它完全由數據庫處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.