我创建了一个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
SET GLOBAL max_allowed_packet=16777216;
将max_allowed_packet
更改为16777216后,我能够使用PHP的multi_query()
成功地从大约6.32MB的SQL文件安装我的数据库。
我在Xampp中这样做了。我被告知这个解决方案可能不适用于共享主机,您可能不允许您的网络托管公司以这种方式更改max_allowed_packet