php mysql 不再能够插入(错误的整数值 : '' for column 'id' at row 1 )

标签 php mysql insert auto-increment

搬到新计算机(和 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 

我发现,如果我从 $db_fields 数组中删除“id”并删除 public $id; 行,事情就会按预期进行。 然而,我有几十个类,我害怕必须为此重新编辑所有类 - 特别是因为我的所有代码在我的旧本地服务器(使用 php5.4)上运行良好,并且在我的公共(public)服务器上仍然运行良好(使用php 5.5),但不适用于我的新设置(使用 php7)。 所以我的问题是:是否有比我想出的解决方案更好的解决方案?如果是的话,那是什么? 非常欢迎和赞赏的建议。 (如果它有助于解决这个恼人的问题,甚至可以 mock 。)

最佳答案

这很可能是因为 MySQL 更新(对我来说像是 5.6 到 5.7)。您应该传递一个整数或NULL,而不是空字符串。

当 ID 自动递增时,传递 NULL,或者不在查询中提及该字段。

如果你不想为每个模型显式定义 null,你可以尝试编写一些中间件;例如IF 字段是 id THEN 跳过字段或使用空值(伪代码 ofc)

关于php mysql 不再能够插入(错误的整数值 : '' for column 'id' at row 1 ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53831232/

相关文章:

MySQL 为依赖表生成 sql 插入

sqlite - 需要从insert语句向sqlite表中插入大量数据

php - 使用 foreach 退回数组 (PHP)

php - 循环遍历php数组问题

php - MongoDB、复杂查询和性能

java - Tomcat6 Java Servlet 服务于 mysql 命令?

php - 使用 PHP 的 proc_open + bypass_shell 在后台运行可执行文件并检索正确的 PID?

mysql - 从不同的 SQL 表中选择数据,按表名过滤

php - PDOStatement::bindValue- SQLSTATE[HY093]:参数编号无效

hadoop - hive :使用选择1插入带有列的 hive 表