Полу вставленные записи MySQL - PullRequest
2 голосов
/ 25 ноября 2011

У меня возникли некоторые проблемы с сайтом, который я написал довольно давно, после просмотра этого, время от времени (6 раз из более чем 5000 вставок), некоторые вставки не выполняются .. 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, который перебирает массив в реальном коде.

Я предполагаю, что соединение получаетпрервана на полпути ...

Я хочу убедиться, что все вставлено или ничего, Должен ли я перейти на использование транзакций?

Декан.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2011

Поскольку вы не делаете это внутри транзакции, вы можете получить половину вставок.Каждая вставка может потерпеть неудачу по многим различным причинам.Исключения повторяющихся ключей, время ожидания блокировки и т. Д.

Если все эти вставки должны обрабатываться как единое целое, добавьте транзакцию вокруг нее (это также может ускорить вставку при получении транзакций лихорадки)

0 голосов
/ 25 ноября 2011

Попробуйте добавить в конце запроса: или die (mysql_error ()); , чтобы вы могли проверить, какие ошибки вы получаете.

И если вы действительно делаете 5000 вставок, вы можете установить тайм-аут на большое число, чтобы оно никогда не останавливалось случайно. Или же вы можете позволить ему проверить, все ли вставлено в таблицу, а если нет, он вставит пропущенные данные ...

...