Php mysql多线程查询间歇性失败
sql文件是从phpMyAdmin直接导出的,大约95%的时间运行时没有问题,所有表都被创建并插入数据。(我正在从头开始创建数据库) 其他5%只创建了第一个表或前4个表,但没有创建其他表(共30个表)Php mysql多线程查询间歇性失败,php,mysql,multi-query,Php,Mysql,Multi Query,sql文件是从phpMyAdmin直接导出的,大约95%的时间运行时没有问题,所有表都被创建并插入数据。(我正在从头开始创建数据库) 其他5%只创建了第一个表或前4个表,但没有创建其他表(共30个表) 我决定不使用multi_查询,因为它似乎有缺陷,并且只在分号后的每一行上使用mysql_查询来查看是否出现了缺陷。有人遇到过这样的问题吗?我从未求助于多重查询。当我需要这样的东西时,我搬到了。另外,如果您不需要查询的任何结果,那么将脚本传递给mysql\u查询也可以。如果导出顺序不正确,并且与外键
我决定不使用multi_查询,因为它似乎有缺陷,并且只在分号后的每一行上使用mysql_查询来查看是否出现了缺陷。有人遇到过这样的问题吗?我从未求助于多重查询。当我需要这样的东西时,我搬到了。另外,如果您不需要查询的任何结果,那么将脚本传递给mysql\u查询也可以。如果导出顺序不正确,并且与外键的require表和其他表冲突,则也会出现这些错误。我认为将SQL文件分解为单个查询的方法是个好主意。即使只是为了比较(看看是否能解决问题) 另外,我不确定你的文件有多大,但我有过几个案例,其中文件非常大,并将其分为若干批完成了任务。快速有效
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();
}
system('mysql-h#username#-u#username#-p#database#<#dump#');
我在使用能够创建或更改表的查询时遇到了类似的问题。特别是,我倾向于得到与外键相关的InnoDB 1005错误;这就像MySQL在进入下一条语句之前没有完全完成一条语句,因此外键缺少适当的引用
在一个系统中,我将有问题的语句拆分为它们自己的文件。在另一个例子中,我确实单独运行了每个命令,使用分号分隔:
system('mysql -h #username# -u #username# -p #database# < #dump_file#');
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, 0, 2) != '--') and (substr($tsl, 0, 1) != '#')) {
$query .= $sql_line;
if (substr($tsl, -1) == ';') {
set_time_limit(300);
$sql = trim($query, "\0.. ;");
$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;
}