2017-08-21 17 views
0

我最近更新了我的服務器從14.04至16.04(Ubuntu的是),並通過這樣做我也更新了MySQL和PHP服務器:Mysql的插入空不服務器更新後,工作

Server版本: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 

爭取做$查詢的print_r和$ data這是它返回的內容:

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正在嚴格模式下運行。

好的解決方案發布在這裏:#1366 - Incorrect integer value:MYsql幫助,但我覺得這是一個解決方法,而不是一個修復,並仍然希望得到它的修復。

謝謝。

+0

是否將'id'設置爲MySQL中的自動增量?你在這個查詢中傳遞了什麼數據? – IsThisJavascript

+0

是的id被設置爲自動增量。我正在傳遞我在問題中顯示的確切數組。 –

+0

你可以從插入查詢中刪除'id',mysql會處理它。 – IsThisJavascript

回答

0

好吧,我發現了這個問題。

閱讀:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_error_for_division_by_zero,看着下面的表格,我已經調整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    | 
+---------------------------------+----------------------------------------------------------------------------------+---------------------------+