如何使用php pdo将多个表安装到mysql数据库

如何使用php pdo将多个表安装到mysql数据库,php,mysql,pdo,Php,Mysql,Pdo,我正在创建一个CMS,并创建了一个在数据库中创建表的自我安装程序 我正在使用这段php代码,它在wamp上一切都很好,但是在服务器上保存10个文件后脚本就退出了 if (!$db = new PDO('mysql:host='.$dbhost.'; dbname='.$dbname, $dbuser, $dbpass)){$msg = 'e|Could Not Connect.';} elseif ($db = new PDO('mysql:host='.

我正在创建一个
CMS
,并创建了一个在数据库中创建表的自我安装程序

我正在使用这段php代码,它在wamp上一切都很好,但是在服务器上保存10个文件后脚本就退出了

if (!$db = new PDO('mysql:host='.$dbhost.'; dbname='.$dbname, $dbuser, $dbpass)){$msg = 'e|Could Not Connect.';}            
        elseif ($db = new PDO('mysql:host='.$dbhost.'; dbname='.$dbname, $dbuser, $dbpass)){
        $sql = '';
        foreach(glob('sql/*') as $file) {$sql .= file_get_contents($file);}     
        $db->exec($sql);    
        }       
sql/
中总共有48个txt文件,如下所示:

--
-- Table structure for table `block_grids`
--

CREATE TABLE IF NOT EXISTS `block_grids` (
  `block_grid_id` int(12) NOT NULL AUTO_INCREMENT,
  `block_grid_name` varchar(25) NOT NULL,
  `row_items_small` tinyint(2) NOT NULL,
  `row_items_medium` tinyint(2) NOT NULL,
  `row_items_large` tinyint(2) NOT NULL,
  `equalize_block_grid` tinyint(1) NOT NULL,
  PRIMARY KEY (`block_grid_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
服务器设置为200mMiBs用于上传,执行的10个文件的总数仅为161KB。不太确定该带它去哪里

上面的代码将所有文件连接在一起,这在wamp上运行良好。我尝试使用此代码单独运行每个文件,但每次仅运行4次:

if (!$db = new PDO('mysql:host='.$dbhost.'; dbname='.$dbname, $dbuser, $dbpass)){$msg = 'e|Could Not Connect.';}            
    elseif ($db = new PDO('mysql:host='.$dbhost.'; dbname='.$dbname, $dbuser, $dbpass)){
    $sql = '';
      foreach(glob('sql/*') as $file) {
      $sql = file_get_contents($file);
      $db->exec($sql);
      }     

    }            

默认情况下,PHP在30秒后停止。您可以尝试以下方法:

set_time_limit(300);

在setup.php中

由于您现在是在主机上,而不是在wamp上,以下内容可能在托管环境中不可行,但请尝试一下。(注意.cnf修改可能不可能)

您将在mysql提示符下运行:

set global wait_timeout=600
这是10分钟,一个可怜的长时间。你根据自己的需要选择价值,而不是我的胡说八道

任何新会话都会获得此值

在您的my.cnf中镜像更改。文件这在mysql重启时生效

报告作业(或其他)中的任何一个事务都自然会引起关注。将事务之外的任何未包装语句视为事务

或者作为一项工作,制作许多teeenie文件


当你说它在wamp上运行良好时,你的意思是说你有第二台服务器,如果有的话,在哪里,是谁?我在我与wamp的comp上设计了它,并将它安装在网络上的共享主机Monster帐户上感谢@Drew Pierce为你提供的输入。自动安装程序的目的是允许非程序员类型快速安装脚本。我的目的是制作一个视频,展示如何在cpanel中创建db。该脚本标识是否未安装db表,并自动将数据带到安装设置,在其中输入db user/pass,然后将数据带到一系列有关其业务的表单,等等。我正在寻找一个解决办法,以允许这一过程发生。如果我们知道的内容,我们可以帮助我不太确定你要求什么。。。sql文件的顺序?顺序而不是。。。一种方法是创建一个日志表,在每个sql命令前后插入一个带有字符串和时间戳的行。然后你就可以专注于日志中最后一个从未有过后续记录的条目。谢谢@WebDevel的输入。正如@Drew Pierce的评论中所解释的,自动安装程序的目的是允许非程序员类型快速安装脚本。我在第二个示例中尝试了
sleep(1)
,但没有效果。据我所知,您有一个安装php文件,对吗?set_time_limit()必须位于该文件的最顶端。这将告诉php不要在30秒后停止。如果这不起作用,您可以将插入拆分为多个步骤(步骤1创建表1,步骤2插入内容1,步骤3创建表2,步骤4插入内容2,…)。但是我更喜欢使用set\u time\u limit()。我尝试了
set\u time\u out(300)
,结果相同。我也尝试了同一个文件夹中的多个步骤,但在阅读您的评论时,我考虑将sql文件拆分为多个文件夹,并按我现在要尝试的顺序执行每个步骤。您写道,服务器在10个文件后停止。也许第11个文件有问题?不需要移动不同文件夹中的文件。您可以在每次插入后将脚本重定向到它自己,并在$\u GET中输入下一个要导入的文件的编号。我完全删除了第11个文件,并尝试了不同的文件组合。我尝试了不同的文件夹。。。没有运气,我最近的尝试是调用每个文件
$sql=file\u get\u contents('sql/block grid item.txt')$db->exec($sql)在四点之后。。。茫然
set global wait_timeout=600