php mysql больше не может вставлять (неверное целочисленное значение: '' для столбца 'id' в строке 1) - PullRequest
0 голосов
/ 18 декабря 2018

После перехода на новый компьютер (и 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).Итак, мой вопрос: есть ли лучшее решение, чем то, которое я придумал?Если так, то, что это?Советы наиболее приветствуются и ценятся.(Даже насмешка, если это поможет решить эту надоедливую проблему.)

1 Ответ

0 голосов
/ 18 декабря 2018

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

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

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

...