Возможно ли одновременно тестить проект на виртуалке и писать его на винде, т.е. будет ли выступать виртуалка в этом случае, как например денвер (имею ввиду доступ к файлам и папкам на виртуалке с винды).
В virtualbox можно настроить общие папки, но это как-то геморно. Я обычно устанавливаю на гостевом линуксе самба-сервер, а винде подключаю сетевой диск.
1. Если есть возможность, то лучше отказаться от phpexcel. Использовать парсер, например, на питоне (пример http://strife.pl/2014/12/converting-large-xls-xlsx-files-to-csv-using-python/).
И парсить в csv.
Если же нет, то xls с помощью phpexcel парсим сразу в csv. В phpexcel есть класс PHPExcel_Writer_CSV.
2. В бд создаем промежуточную таблицу. По структуре такую же, как таблица назначения + доп колонки: flag (см п.5), error. Таблица не временная, чтобы можно было показать промежуточный результат оператору/администратору (как минимум показать записи с ошибками).
3. Парсим xls в csv. Далее построчно читаем файл с помощью fgetcsv, проверяем данные, записываем строчку в другой csv файл! Если есть ошибки, то добавляем еще сообщение об ошибке (которое должно в п.4 попасть в колонку error).
4. После того как проверили прошли по всем строчкам, загружаем с помощью LOAD DATA INFILE в промежуточную таблицу.
Пункты 3 и 4 работают быстрее чем, если бы писали построчно в бд.
5. Далее нам надо определить какие данные вставлять, а какие обновлять. Если поле артикул - pk, то в этом случае проще. Можно использовать insert select on duplicate key update.
Если же нет, то необходимо сравнить данные в двух таблицах и выставить значение в колонке flag. Далее на основе flag, апдейтим и инсертим записи.
В битовой маске удобно хранить значения чекбоксов. Но если их немного.
Получается, что 32 чекбокс будет иметь значение 2^32. В хексе 100000000.
Или я не правильно понимаю?
Может быть ошибка в запросе? PDO по умолчанию не выкидывает эксепшн.
Что возвращает $statement_handler->errorInfo(); после $statement_handler->execute()
А lastInsertId может возвращает id других успешных инсертов.
Например файлы кук лочатся, поэтому пока не отработает первый, запущенный ранее, второй будет висеть и ждать.
Файлы кук? Может быть файл сессии?
Перед длительными операциями имеет смысл вызывать session_write_close, чтобы освободить сессию для других процессов.
Если вы хотите дополнить первый массив элементами второго без перезаписи элементов первого массива и без переиндексации, используйте оператор объединения массивов +