Добрый день.
Никак не могу реализовать вставку данных с помощью db_insert.
Вставка выполняется с помощью: db_insert('test_table')->fields($tbl_structure)->values($tbl_data)->execute();
$tbl_data = array_combine($tbl_structure, explode("\t", $sub_str));
$tbl_structure = array(10) {
[0]=>
string(7) "field_0"
[1]=>
string(7) "field_1"
[2]=>
string(7) "field_2"
...}
$tbl_data = array(10) {
["field_0"]=>
string(6) "data_0"
["field_1"]=>
string(0) ""
["field_2"]=>
string(6) "data_3"
...}
execute() вызывает ошибку: General error: 1366 Incorrect integer value: '' for column field_1...
Собственно вопрос. Как правильно вызвать db_insert или передать пустое значение в виде '' через $tbl_data?
ЗЫ: Данных много, структуру таблицы менять не желательно.
Комментарии
А вы пытаетесь вставить строку (или что-то вроде этого):
<?php
$tbl_data = array(10) {
["field_0"]=>
string(6) "data_0"
["field_1"]=>
string(0) ""
["field_2"]=>
string(6) "data_3"
...}
?>
Может, должно быть так:
<?php
$tbl_data = array {
'field_0' => 'some value',
'field_1' => NULL,
'field_2' => 'some value',
...}
?>
В целом - если нужно вставить пустое (NULL) значение, то соответственно нужно для поля (колонки) в БД отключить свойство NOT NULL.
Для int поля передать null не получается: Integrity constraint violation: 1048 Column 'field_1' cannot be null...
В БД поле определено как:
`field_1` INT(11) DEFAULT '0'
Ну передайте ноль для пустого значения.
<?php
$tbl_data = array {
'field_0' => 'some value',
'field_1' => isset($my_numeric_value) ? $my_numeric_value : 0,
'field_2' => 'some value',
...}
?>
Проблема в том, что данных много и городить дополнительные проверки не хочется, сильно замедляется обработка.
Поэтому и возник вопрос. Как передать в db_insert пустое значение ('' или null), чтобы отработал механизм подстановки БД (default values).
изменить значения int таким образом:
$myvar = empty($myvar) ? NULL : $myvar;