PHP вставка MySQL работает на Dev, но не в производстве, вставьте идентификатор 0 в столбце автоинкремента

У меня есть следующая функция php, которая отправляет запрос на вставку в базу данных mysql. На тестируемом / dev сервере он работает каждый раз, но при клонировании (всего приложения через git) на рабочий компьютер не возвращает ошибок, но не может вставить строку в базу данных. Все таблицы в базах данных (dev и production) создаются с использованием одних и тех же скриптов (фактические значения данных могут отличаться из-за тестирования и т. Д.).

После подготовки, связывания и выполнения я проверяю состояние $ sql_str, которое должно быть истинным или ложным. В каждом случае он возвращает true и вставляет новую строку на сервер разработки. На рабочем сервере он все еще возвращает true, но строка не вставлена. автокоммит включен по умолчанию. Есть ли случаи, когда execute вернется для INSERT, где строка не вставлена?

function submit_new_batch_sheet_request($bulk_liquid_code,

$daycode, $creation_date,
$db,$log,$session){

$sql_str=$db->prepare("INSERT INTO batch_sheets (batch_sheet_name, BULK_LIQUID, DAYCODE, DATE, OPERATOR_BREW) VALUES (?,?,?,?,?)");
$data = [];

if(!$sql_str){
$log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission Entry: Error 1: '.$db->error);
$data = array('Error:',-1);
}
else{
$batch_sheet_name = get_next_batch_sheet_name($db,$log,$session);
$insertdate = date('Y-m-d', strtotime($creation_date));

$log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Sheet Name: '.$batch_sheet_name);
$log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Insert Date: '.$insertdate);$sql_str->bind_param('ssssd',$batch_sheet_name, $bulk_liquid_code,
$daycode,
$insertdate,
$session['PersonID']);

if(!$sql_str){
$log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Error 2: '.$sql_str->error);
$log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Error 2: '.$db->error);
$data = array('Error:',-2);
}
else{
$sql_str->execute();if(!$sql_str){
$error_str=$db->error;
$log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Error 3: '.$error_str);
$data = ['Error:',-3];
}
else{
$batch_sheet_id=$sql_str->insert_id;
$log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission returned: '.$batch_sheet_id);
$data = array('Success:',$batch_sheet_id);
}

}

}

return json_encode($data);

}

EDIT1:

Журналы с попытки отправки. Примечание: в таблице есть столбец auto_increment, поэтому insert_id должен быть ненулевым.

[06 / Sep / 2017: 16: 17: 31] (submit_new_batch_sheet) ИМЯ ПОЛЬЗОВАТЕЛЯ Представление новой партии: Имя листа: 1709,7

[06 / Sep / 2017: 16: 17: 31] (submit_new_batch_sheet) ИМЯ ПОЛЬЗОВАТЕЛЯ Представление новой партии: Вставьте дату: 2017-09-05

[06 / Sep / 2017: 16: 17: 31] (submit_new_batch_sheet) ИМЯ ПОЛЬЗОВАТЕЛЯ Возвращено отправка новой партии: 0

РЕДАКТИРОВАТЬ 2:

Из комментариев, которые я вижу, моя проверка выполнения должна быть:

if($sql_str->execute()){...}

после внесения изменений я получаю сообщение об ошибке вставки.

EDIT: 3

Я теперь решил проблему. Проблема с функцией php заключалась в том, что в моих операторах if было неверное условие.

if($sql_str->execute()){...}

Вышеуказанная строка теперь корректно показывает выполнение где как

if($sql_str)

было неправильно (спасибо комментатору за указание на это). Истинная ошибка была связана с ограничением на один из столбцов на производственном сервере (не принимал нулевые значения). Этот столбец теперь был изменен, чтобы принимать значения NULL, и функция отправляет.

0

Решение

Как упомянуто в комментариях, мой требуемый статус возврата прибывает из

if($sql_str->execute()){...}

не

if($sql_str){...}

сделав это изменение, функция правильно сообщает, что выполнить не удалось. В журнале ошибок (из db-> error) указывалось, что столбцу передано нулевое значение, которое не допускает пустых значений. Это отдельная проблема, и благодаря комментаторам я теперь считаю этот вопрос решенным. Проблема с колонкой, отклоняющей значения NULL, является отдельной проблемой.

0

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

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

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