У меня есть таблица, имеющая следующую структуру:
Поля 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
,
Задача ещё не решена.
Других решений пока нет …