首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP multi_query安装大型SQL文件

使用PHP multi_query安装大型SQL文件
EN

Stack Overflow用户
提问于 2022-11-22 16:38:02
回答 2查看 37关注 0票数 0

我创造了一个CMS。安装CMS时,我必须安装它的数据库。我在不打开multi_query()的情况下使用PHP来存储所有的数据库。当SQL文件大小为624 as时,数据库将成功安装。但是,当SQL文件大小达到6.32MB或更多时,数据库就不会安装。下面是通过PHP安装数据库的代码

代码语言:javascript
复制
            $sParamSqlFile = 'database.sql';
            if(file_exists($sParamSqlFile)){
            
                $fSql = file_get_contents($sParamSqlFile);

                /* execute multi query */
                if ($oDbConn->multi_query($fSql)){
                    do {
                        /* store first result set */
                        if ($oResult = $oDbConn->store_result()) {
                            while ($aRow = $oResult->fetch_row()) {
                                //
                            }
                            $oResult->free();
                        };
                        /* print divider */
                        if ($oDbConn->more_results()){
                            //
                        }
                    } while ($oDbConn->next_result());
                }
                else{
                    return 'false';
                }
                
                /* close connection */
                $oDbConn->close();
                return 'true';
            }
            return $sParamSqlFile . ' does not exist';

编辑:我在试图安装数据库时输入了此错误“警告: mysqli::multi_query():在读取SET_OPTION的响应包. PID=8660"时出错

您能帮助解决方案,以便在SQL文件很大时安装数据库吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-28 15:54:20

为了解决这个问题,我参考了这个答案https://stackoverflow.com/a/5688506/12963244

我在phpMyAdmin中运行了这个SQL语句来显示当前的max_allowed_packet

代码语言:javascript
复制
SHOW VARIABLES LIKE 'max_allowed_packet';

max_allowed_packet为1048576。通过在phpMyAdmin中运行以下SQL语句,我将其更改为16777216

代码语言:javascript
复制
SET GLOBAL max_allowed_packet=16777216;

在将max_allowed_packet更改为16777216之后,我成功地使用multi_query()从一个大约6.32MB的SQL文件安装了数据库。

我在Xampp做的。我被告知,此解决方案可能无法在共享托管中工作,在这种情况下,您可能不允许您的web托管公司以这种方式更改max_allowed_packet

票数 0
EN

Stack Overflow用户

发布于 2022-11-22 17:01:36

代码简单返回false

当查询失败时,您应该检查错误是什么。

很可能包的大小太大了。

尝试解析数据- mysqldump将产生一个定义良好的结构,很容易拆分成单独的语句(您只需要确保“;”的任何出现在单引号内都标志着语句的结束-然后一次只运行一个语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74536117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档