php mysql больше не может вставлять (неверное целочисленное значение: » для столбца ‘id’ в строке 1)

После перехода на новый компьютер (и Mac Mojave) я не смог вставить строки в базе данных из файлов php, используя классы и объекты. Как это:

$new_entry = SomeClassName::add_record($foo, $bar );
if($new_entry && $new_entry->save()) {
//do something here
}

Определение класса выглядит так:

class SomeClassName extends DBObject {
protected static $table_name="some_table";
protected static $db_fields = array( 'id' , 'foo' , 'bar' );
public $id;
public $foo;
public $bar;
public $errors=array();
}

mysqli_error() дает мне:

Incorrect integer value: '' for column 'id' at row 1

Я обнаружил, что все будет работать так, как ожидалось, если я уберу «id» из $db_fields массив и удалить строку public $id;,
Тем не менее, у меня есть десятки классов, и я боюсь, что для этого нужно отредактировать их все — тем более, что весь мой код работал нормально на моем старом локальном сервере (с использованием php5.4) и все еще отлично работает на моем общедоступном сервере (используя php 5.5), но не на моей новой установке (используя php7).
Итак, мой вопрос: есть ли лучшее решение, чем то, которое я придумал? Если так, то, что это?
Советы приветствуются и приветствуются. (Даже насмешка, если это поможет решить эту надоедливую проблему.)

0

Решение

Это, скорее всего, из-за обновления MySQL (мне кажется, 5.6 до 5.7). Вы должны передать целое число, или NULLвместо пустой строки.

Проходить NULLили не упоминайте поле в вашем запросе, когда идентификатор автоматически увеличивается.

Если вы не хотите явно определять null для каждой модели, вы можете попробовать написать промежуточное программное обеспечение; например IF field IS id THEN skip field OR use null value (псевдокод ofc)

0

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

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

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