加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – mysql multi_query间歇性失败

发布时间:2020-12-13 22:43:24 所属栏目:PHP教程 来源:网络整理
导读:function cpanel_populate_database($dbname) { // populate database $sql = file_get_contents(dirname(__FILE__) . '/PHP-Point-Of-Sale/database/database.sql'); $mysqli-multi_query($sql); $mysqli-close(); } sql文件是从phpMyAdmin直接导出的,大约9
function cpanel_populate_database($dbname) 
{ 
     // populate database
     $sql = file_get_contents(dirname(__FILE__) . '/PHP-Point-Of-Sale/database/database.sql');
     $mysqli->multi_query($sql);

     $mysqli->close();
 }

sql文件是从phpMyAdmin直接导出的,大约95%的时间运行没有问题,所有表都被创建并插入数据. (我从头开始创建数据库)

另外5%只创建了第一个表,有时创建了前4个表,但没有创建其他表(有30个表).

我决定不使用multi_query,因为它看起来很麻烦,看看是否通过在分号后在每一行使用mysql_query来发生错误.有没有人遇到像这样的问题?

将multi_query与可以创建或更改表的查询一起使用时,我发现了类似的问题.特别是,我倾向于得到InnoDB 1005错误,这些错误似乎与外键有关;就像MySQL在继续下一个之前没有完全完成一个语句,因此外键缺少适当的指示.

在一个系统中,我将有问题的语句拆分为自己的文件.在另一个,我确实分别运行每个命令,分裂分号:

function load_sql_file($basename,$db) {
    // Todo: Trim comments from the end of a line
    log_upgrade("Attempting to run the `$basename` upgrade.");

    $filename = dirname(__FILE__)."/sql/$basename.sql";
    if (!file_exists($filename)) {
        log_upgrade("Upgrade file `$filename` does not exist.");
        return false;
    }

    $file_content = file($filename);
    $query = '';
    foreach ($file_content as $sql_line) {
        $tsl = trim($sql_line);
        if ($sql_line and (substr($tsl,2) != '--') and (substr($tsl,1) != '#')) {
            $query .= $sql_line;
            if (substr($tsl,-1) == ';') {
                set_time_limit(300);
                $sql = trim($query,".. ;");
                $result = $db->execute($sql);
                if (!$result) {
                    log_upgrade("Failure in `$basename` upgrade:n$sql");
                    if ($error = $db->lastError()) {
                        log_upgrade("$error");
                    }

                    return false;
                }

                $query = '';
            }
        }
    }

    $remainder = trim($query);
    if ($remainder) {
        log_upgrade("Trailing text in `$basename` upgrade:n$remainder");
        if (DEBUG) trigger_error('Trailing text in upgrade script: '.$remainder,E_USER_WARNING);
        return false;
    }

    log_upgrade("`$basename` upgrade successful.");
    return true;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读