mysql multi_query_php – mysql multi_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, 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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值