MySQL и PHP lllegal смещение строки и неверное целочисленное значение при добавлении в базу данных

У меня есть таблица, имеющая следующую структуру:

  1. table_id (первичный ключ, не ноль)
  2. Идентификатор пользователя
  3. foreign_key1
  4. foreign_key2

Поля 3 а также 4 это внешние ключи от других таблиц.

И иногда некоторые из них нужно заполнять, но для другого нет никакого значения.

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

Недопустимое смещение строки

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

var_dump дает мне:

«SQLSTATE [HY000]: общая ошибка: 1366 Неверное целочисленное значение: » для
столбец ‘foreign_key2’ в строке 1 «

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

Сценарии:

Как угловой скрипт, по нажатию кнопки:

saveUnitData(){
let unit_type = '';
let location_type_id = '';
let number_of_hh = '';
let unit_status = '';

let arrayOfActualities;

let add_date = '';
let user_id = localStorage.getItem('user_id');
unit_type = this.formGroup.controls['unit_type'].value;
location_id = this.formGroup.controls['location_type_id'].value;
number_h = this.formGroup.controls['number_of_hh'].value;
unit_status = this.formGroup.controls['unit_status'].value;
add_date = this.formGroup.controls['add_date'].value;

arrayOfActualities = this.arrayOfLegalProtection;
//console.log(arrayOfActualities.length);
console.log(add_date);
//Sending data
this.auth.saveUnitData(
unit_type,
location_type_id,
user_id,
number_of_hh,
unit_status,
add_date,
arrayOfActualities)
.subscribe(

)
}

arrayOfLegalProtection метод массива:

add_protection_legal(){
let foreign_key1= '';
let foreign_key2= '';
let foreign_key3= '';
let add_date = '';
foreign_key1= this.formGroup.controls['foreign_key1'].value;

foreign_key2= this.formGroup.controls['foreign_key2'].value;
add_date = this.formGroup.controls['add_date'].value;
this.showSubHeader++;
this.arrayOfLegalProtection.push({foreign_key1: foreign_key1,
foreign_key2: foreign_key2,
foreign_key3: foreign_key3,
addDate: add_date})
console.log(this.arrayOfLegalProtection);
}

PHP скрипт:

if(sizeof($arrayOfActualities)>0)
{
foreach($arrayOfActualities as $array)
{
if($array['situationId']!='')
{
$situation_id='';
}
else{
$situation_id = $array['situationId'];
}
if($array['foreign_key1']!='')
{
$foreign_key1='';
}
else{
$foreign_key1= $array['foreign_key1'];
}
if($array['foreign_key2']!='')
{
$foreign_key2='';
}
else{
$foreign_key2= $array['foreign_key2'];
}

$status = "Active";

try{
$sqlActualities = "INSERT into unit_situation_legal_protection(
unit_situation_legal_protection_status,
unit_situation_legal_protection_date_added,
foreign_key2, foreign_key1, protection_id, user_id)
VALUES(:actStatus, :dateAdded, :legal,
:situation, :protection, :userId)";
$sqlActExec = $this->conn->prepare($sqlActualities);
$sqlActExec->bindValue('actStatus', $status);
$sqlActExec->bindValue('dateAdded', $dateAdded);
$sqlActExec->bindValue('legal', $foreign_key1);
$sqlActExec->bindValue('situation', $foreign_key2);
$sqlActExec->bindValue('protection', $protection_id);
$sqlActExec->bindValue('userId', $user_id);
$sqlActExec->execute();

return "success";
}
catch(PDOException $e)
{
return $e->getMessage();
}
}
}

Обратите внимание, что ограничение внешнего ключа установлено для принятия нулевых значений foreign_key1 а также foreign_key2,

0

Решение

Задача ещё не решена.

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

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