使用PHP multi_query安装大型SQL文件



我创建了一个CMS。安装CMS时,必须安装CMS的数据库。我使用PHPmulti_query()来安装数据库而不打开phpMyAdmin。当SQL文件大小为624KB时,表示数据库安装成功。但是,当SQL文件大于等于6.32MB时,不安装数据库。下面是我用来通过PHP

安装数据库的代码
$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文件很大吗?

代码简单返回false

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

很可能数据包大小太大。

试着解析数据——mysqldump会生成一个定义良好的结构,很容易分割成单独的语句(你只需要确保任何出现的';' NOT在单引号中标志着语句的结束),然后一次运行一个语句。

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

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

SHOW VARIABLES LIKE 'max_allowed_packet';

max_allowed_packet为1048576。我通过在phpMyAdmin

中运行以下SQL语句将其更改为16777216
SET GLOBAL max_allowed_packet=16777216;

max_allowed_packet更改为16777216后,我能够使用PHP的multi_query()成功地从大约6.32MB的SQL文件安装我的数据库。

我在Xampp中这样做了。我被告知这个解决方案可能不适用于共享主机,您可能不允许您的网络托管公司以这种方式更改max_allowed_packet

最新更新