После перехода на новый компьютер (и 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).
Итак, мой вопрос: есть ли лучшее решение, чем то, которое я придумал? Если так, то, что это?
Советы приветствуются и приветствуются. (Даже насмешка, если это поможет решить эту надоедливую проблему.)
Это, скорее всего, из-за обновления MySQL (мне кажется, 5.6 до 5.7). Вы должны передать целое число, или NULL
вместо пустой строки.
Проходить NULL
или не упоминайте поле в вашем запросе, когда идентификатор автоматически увеличивается.
Если вы не хотите явно определять null для каждой модели, вы можете попробовать написать промежуточное программное обеспечение; например IF field IS id THEN skip field OR use null value
(псевдокод ofc)
Других решений пока нет …