我在很久以前写的一个网站上遇到了一些问题,在看过之后,时不时地(超过5,000次插入6次)一些插入没有完成。例如:
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,它循环通过实际代码中的数组。
我猜是因为连接在中途中断了..
我想确保所有东西都被插入,或者什么都没有,我应该切换到使用事务吗?
迪恩。
发布于 2011-11-25 19:21:43
尝试在查询的末尾添加:或die ( mysql_error() );,这样就可以检查得到了哪些错误。
如果你真的要做5000次插入,你可以将超时设置为一个很大的数字,这样它就不会意外地停止。或者,您可以让它检查是否在表中插入了所有内容,如果没有,则插入跳过的数据……
发布于 2011-11-25 19:24:51
因为你不是在事务中这样做的,所以你可以得到一半的插入。每次插入都会因为很多不同的原因而失败。重复键异常、锁定超时等。
如果所有这些插入都被当作一个单元来处理,那么在它周围添加一个事务(这也可能会加快插入的速度,因为您得到了狂热的事务)。
https://stackoverflow.com/questions/8268334
复制相似问题