После перехода на новый компьютер (и 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)