脚本宝典收集整理的这篇文章主要介绍了php – 记录在PDO mssql事务循环中消失,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$ssql = "Insert into table (a,b,c) VALUES(?,?,?)" $osqlStmnt = $pdo->PRepare($ssql); $osqlStmnt->setattribute(PDO::sqlSRV_ATTR_ENCODING,PDO::sqlSRV_ENCODING_SYstem); if (!$osqlStmnt) { echo $pdo->errorInfo(); // Handle errors } $pdo->beginTransaction(); $iLineCounter = 1; while (($sLine = fgets ($oCSV,8000)) !== FALSE) { $aLine = explode('|',$sLine); //fgetscsv did not work proPErly if ($iLineCounter % 100 == 0) { lo("Inserting row " . $iLineCounter); $pdo->commIT(); sleep(0.15); $pdo->beginTransaction(); } try { $osqlStmnt->execute($aLine); $iSuccesulInserts++; } catch (exception $e) { print_r($e); $iFailedInserts++; } $iLineCounter++; } $pdo->commit();
正如您所看到的,我每100行执行一次提交,甚至还添加了一些睡眠.我曾经每25.000行只运行一次提交,我没有使用任何睡眠.但是,有一次,我发现我丢失了记录.我开始玩这些设置(睡眠和行数).这样我将丢失记录的数量从50.000减少到大约100.但我仍然缺少记录!他们要去哪?我知道sql没问题,因为我遇到错误时会立即收到错误.
我以为我可以在交易过程中堆叠很多插入?调用beginTransaction会有问题吗?
更新:
恩惠结束了,我不得不奖励它.谢谢大家的答案.或者实际上是提示,因为没有人真正回答过我的问题.我并不是要求解决方法,尽管您的建议非常受欢迎.得到赏金的答案是因为它最接近实际回答我的问题.不幸的是它没有用.
您确定不能使用BULK INSERT或XML来一次插入多行吗?
以上是脚本宝典为你收集整理的php – 记录在PDO mssql事务循环中消失全部内容,希望文章能够帮你解决php – 记录在PDO mssql事务循环中消失所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。