Общая ошибка MySQL после успешной вставки из представления

Я использую Laravel 5.4 с PHP 7.2 все в xampp. Я пытаюсь усечь временную таблицу, а затем вставить новые данные из MySQL View. Код выполняется и делает именно то, что я хочу, но он говорит, что есть ошибка —

SQLSTATE [HY000]: общая ошибка (SQL: вставить в prod_joins_temp
(Дата, код, SID, TIME_START, time_end, сделал, Firsts, секунды, p_broken, q_broken, g_broken, prod_id)
Выберите дату, код, sid, time_start, time_end, выполнено, первые, секунды, p_broken, q_broken, g_broken, prod_id из prod_joins)

Изначально у меня была следующая ошибка General error: 1615 Prepared statement needs to be re-prepared после вставки двух столбцов в мой вид: time_start а также time_end колонка.

Я попытался удалить два столбца, чтобы увидеть, если это было проблемой, но теперь все, что я получаю в страшной общей ошибке.

Я попробовал этот ответ Laravel: Общая ошибка: 1615 Подготовленное заявление необходимо переподготовить. Это не сработало, и согласно комментариям это вызовет проблемы с проверками.

Я нашел этот ответ Ошибка PDO: «SQLSTATE [HY000]: общая ошибка» при обновлении базы данных что является точно такой же проблемой для моей проблемы, но не отвечает на мой вопрос, потому что я не использую fetchAll() и при этом я не использую дублированные переменные любых переменных вообще.

Я попробовал два способа достижения своей цели следующим образом.

Усеченная таблица prod_joins_temp

ProdJoinsTemp::truncate();

Затем заполните таблицу prod_joins_temp из представления prod_joins

DB::select('Insert Into prod_joins_temp (date,code,sid,time_start,time_end,made,firsts,seconds,p_broken,q_broken,g_broken,prod_id) Select date,code,sid,time_start,time_end,made,firsts,seconds,p_broken,q_broken,g_broken,prod_id From prod_joins');

Другой способ, который дает мне точно такую ​​же ошибку, заключается в следующем

удалить таблицу prod_joins_temp, если она существует

\Schema::dropIfExists('prod_joins_temp');

Затем создайте таблицу prod_joins_temp из представления prod_joins

DB::select('CREATE TABLE prod_joins_temp AS SELECT * FROM prod_joins;');

Вот код, который делает представление

SELECT
`scorecard54`.`production`.`date` AS `date`,
`scorecard54`.`products`.`code` AS `code`,
`scorecard54`.`production`.`sid_production` AS `sid`,
`scorecard54`.`production`.`time_start` AS `time_start`,
`scorecard54`.`production`.`time_end` AS `time_end`,
`scorecard54`.`production`.`made` AS `made`,
`scorecard54`.`qcontrol`.`firsts` AS `firsts`,
`scorecard54`.`qcontrol`.`seconds` AS `seconds`,
`scorecard54`.`production`.`broken_production` AS `p_broken`,
`scorecard54`.`qcontrol`.`broken_qcontrol` AS `q_broken`,
`scorecard54`.`grinding`.`discarded` AS `g_broken`,
`scorecard54`.`products`.`prod_id` AS `prod_id`
FROM
(
(
(
`scorecard54`.`production`
LEFT JOIN `scorecard54`.`products` ON
(
(
`scorecard54`.`production`.`prod_code` = `scorecard54`.`products`.`prod_id`
)
)
)
LEFT JOIN `scorecard54`.`grinding` ON
(
(
`scorecard54`.`production`.`sid_production` = `scorecard54`.`grinding`.`sid_grinding`
)
)
)
LEFT JOIN `scorecard54`.`qcontrol` ON
(
(
`scorecard54`.`grinding`.`tray_id_grinding` = `scorecard54`.`qcontrol`.`tray_id_qcontrol`
)
)
)
WHERE
(
`scorecard54`.`grinding`.`have_qcontrol` = 1
)

А вот функция, которая отбрасывает и создает таблицу из представления

public function generateTable(Request $request) {

// Drop temp table
\Schema::dropIfExists('prod_joins_temp');

// re create table with the new data
DB::select('CREATE TABLE prod_joins_temp AS SELECT * FROM prod_joins;');


$request->session()->flash('alert-success', 'Success: Reports table regenerated.');
return Redirect::to('/statistics/');

}

Я также попытался усечь, а затем снова с этой функцией

public function generateTable(Request $request) {

// Drop temp table
ProdJoinsTemp::truncate();

// re generate table with the new data
DB::select('Insert Into prod_joins_temp (date,code,sid,time_start,time_end,made,firsts,seconds,p_broken,q_broken,g_broken,prod_id) Select date,code,sid,time_start,time_end,made,firsts,seconds,p_broken,q_broken,g_broken,prod_id From prod_joins');

$request->session()->flash('alert-success', 'Success: Reports table regenerated.');
return Redirect::to('/statistics/');

}

Что я здесь не так делаю? Есть ли какой-то кеш для просмотров?

0

Решение

Я исправил эту проблему из этого ответа SQLSTATE [HY000]: общая ошибка: ошибка 2053 в Laravel

Где раньше я обновлял свою таблицу, используя следующие

DB::select('Insert Into prod_joins_temp (date,code,sid,time_start,time_end,made,firsts,seconds,p_broken,q_broken,g_broken,prod_id) Select date,code,sid,time_start,time_end,made,firsts,seconds,p_broken,q_broken,g_broken,prod_id From prod_joins');

Я изменил выбранную часть запроса для обновления, и все работает нормально. пожалуйста, смотрите следующее

DB::update('Insert Into prod_joins_temp (date,code,sid,time_start,time_end,made,firsts,seconds,p_broken,q_broken,g_broken,prod_id) Select date,code,sid,time_start,time_end,made,firsts,seconds,p_broken,q_broken,g_broken,prod_id From prod_joins');

Я не знаю, почему предыдущий способ работал до того, как я добавил поля в свое представление, но теперь он требует, чтобы я использовал update вместо select

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector