繁体   English   中英

服务器更新后,MySQL insert null 不起作用

[英]MySQL insert null doesn't work after server update

我最近将我的服务器从 14.04 更新到 16.04(即 Ubuntu),通过这样做,我还将 MySQL 和 PHP 服务器更新为:

服务器版本:5.7.19-0ubuntu0.16.04.1 - (Ubuntu)

PHP 版本:7.0.22-0ubuntu0.16.04.1

因为我的很多应用程序开始行为不端,这都与 NULL 有关。

看一个例子,这里是 PHP 代码:

$stmt=$db->prepare($query);
$stmt=$db->execute($data);

但这会导致:PHP 消息:PHP 致命错误:

Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'NULL' for column 'id' at row 1

尝试执行 $query 和 $data 的print_r这是它返回的内容:

insert into `company` (`id`,`Name`,`customerid`,`named_person`,`email`,`contact_no`,`payment_term`,`billing_contact`,`billing_email`,`billing_add1`,`billing_add2`,`billing_postcode`,`docketmail`,`livefeed`,`auto_populate`,`risk`,`question`,`livefeed_pass`,`livefeed_user`,`owner`) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) on duplicate key update`Name`=?,`customerid`=?,`named_person`=?,`email`=?,`contact_no`=?,`payment_term`=?,`billing_contact`=?,`billing_email`=?,`billing_add1`=?,`billing_add2`=?,`billing_postcode`=?,`docketmail`=?,`livefeed`=?,`auto_populate`=?,`risk`=?,`question`=?,`livefeed_pass`=?,`livefeed_user`=?

Array
(
    [0] => NULL
    [1] => sdasdasd
    [2] => 0
    [3] => sdasdasd
    [4] => asdasdas
    [5] => sdasdasd
    [6] => 14
    [7] => dadasdsad
    [8] => asdsadasd
    [9] => dasdasdas
    [10] => dasdasdsad
    [11] => dasdasdas
    [12] => 
    [13] => 0
    [14] => 1
    [15] => 0
    [16] => 0
    [17] => 
    [18] => 
    [19] => 1
    [20] => sdasdasd
    [21] => 0
    [22] => sdasdasd
    [23] => asdasdas
    [24] => sdasdasd
    [25] => 14
    [26] => dadasdsad
    [27] => asdsadasd
    [28] => dasdasdas
    [29] => dasdasdsad
    [30] => dasdasdas
    [31] => 
    [32] => 0
    [33] => 1
    [34] => 0
    [35] => 0
    [36] => 
    [37] => 
)

这在更新服务器之前有效。

innodb 在关闭的严格模式下运行。

更新

此处发布的解决方案有所帮助,但我觉得这是一种解决方法而不是修复方法,并且仍然希望正确修复它。

好的,我发现了问题。

阅读: https : my.cnf表,我对my.cnf做了如下调整:

 sql_mode=ERROR_FOR_DIVISION_BY_ZERO

现在它按我的预期工作,不知道为什么它首先出错。

+---------------------------------+----------------------------------------------------------------------------------+---------------------------+
| Desired Behavior                | MySQL 5.7.x Versions Except 5.7.4 Through 5.7.7                                  | MySQL 5.7.4 Through 5.7.7 |
+---------------------------------+----------------------------------------------------------------------------------+---------------------------+
| insert NULL, produce no warning | ERROR_FOR_DIVISION_BY_ZERO not enabled                                           | strict mode not enabled   |
| insert NULL, produce warning    | ERROR_FOR_DIVISION_BY_ZERO, or ERROR_FOR_DIVISION_BY_ZERO + strict mode + IGNORE | strict mode + IGNORE      |
| error                           | ERROR_FOR_DIVISION_BY_ZERO + strict mode                                         | strict mode               |
+---------------------------------+----------------------------------------------------------------------------------+---------------------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM