php多个mysql插入

时间:2013-09-09 12:04:43

标签: php mysql

我想从我的数据库的一个表中读取数据(从页面中选择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);   

   }

 ?>

4 个答案:

答案 0 :(得分:2)

在执行第二个while循环之前,请尝试使用mysql_data_seek()

mysql_data_seek($result, 0);

记录集$result中的指针需要重置为零,否则它仍会指示它在最后。

首先将所有记录存储在一个数组中,然后执行foreach将数据插入数据库

答案 1 :(得分:0)

我认为多个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);   

         }

答案 2 :(得分:0)

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);   

   }

答案 3 :(得分:0)

该计划结构不合理。当控件进入第二个循环时,结果集已经完全消耗。相反,将它们放在同一个循环中以解决您遇到的直接问题:

 // 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);   

   }

 ?>
  • 但是,您可能希望在纯SQL中使用,您可以使用一个与所选结果集一起使用的插入命令。

MySQL INSERT... SELECT

INSERT INTO destTable (col1, col2, col3) 
    SELECT srcCol1, srcCol2, srcCol3 FROM srcTable;

这种方式甚至可能更快:数据不需要传送到运行PHP代码的服务器,而是返回到数据库 - 它完全由数据库处理。

  • 但请注意,自PHP 5.5起,不推荐使用mysql_ *函数,因此您应该认真考虑其他解决方案。我建议使用PDO。