我在很久以前写过的网站遇到了一些问题,经过深入研究,不时(超过5,000次插入6次)一些插件没有完成.. EG:
mysql_query("INSERT INTO `invoices` (subtotal, vat, total) VALUES ('30.00', '6.00', '36.00');", $conn);
$invoice_id = mysql_insert_id();
for($i=0; $i < 3; $i++) mysql_query("INSERT INTO `invoice_items` (item_name, invoice_id, subtotal, vat, total, tax_code) VALUES ('Bricks', '$invoice_id', '10.00', '2.00', '12.00', 'T1');", $conn);
有时for循环中的那些不会被插入,显然for循环是一个foreach,它在实际代码中循环遍历数组。
我猜是因为连接中途被中断了..
我想确保一切都插入或什么都没有,我应该切换到使用交易吗?
迪安。
答案 0 :(得分:0)
尝试在查询结尾添加:或者死(mysql_error()); ,这样您就可以检查自己得到的错误。
如果你真的在进行5000次插入,你可以将超时设置为一个很大的数字,这样就不会意外停止。或者您可以让它检查表中是否插入了所有内容,如果没有,则会插入跳过的数据...
答案 1 :(得分:0)
由于您不在事务中执行此操作,因此可以获得一半插入。每个插入都可能由于许多不同的原因而失败。重复的密钥异常,锁定超时等等。
如果要将所有这些插入视为一个单元,请在其周围添加一个事务(它可能还会在您进行发烧事务时加快插入速度)