teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

「SHOW CREATE TABLE servers;」の結果を追記。

2017/10/04 08:05

投稿

pitfall
pitfall

スコア11

title CHANGED
File without changes
body CHANGED
@@ -20,10 +20,12 @@
20
20
  ###該当のソースコード
21
21
  (class Server extends Model内のコードです。)
22
22
 
23
+ ```PHP
23
24
  $query = 'insert into servers (kind, address, db_name, note) values(?, ?, ?, ?)';
24
25
  // $kind, $address, $db_name, $noteには上記エラーメッセージ中のSQLにある値が格納されています
25
26
  $param = [$kind, $address, $db_name, $note];
26
27
  $result = DB::insert($query, $param);
28
+ ```
27
29
 
28
30
  ###試したこと
29
31
  MariaDB(MySQL)ではsql_modeによりtimestampに0が挿入可能か不可能かを設定できることを知り、確認したところ、0を挿入できる設定でした。実際、エラーメッセージのSQLをコピーし、valuesの各値を「'」で囲ってからphpmyadminで実行すると正常に挿入できました。
@@ -32,11 +34,32 @@
32
34
  NOT NULLでデフォルト値0でしたので、ためしにデフォルト値を問題ない数値(1999-12-31 23:59:59)にしたところ、エラーなく挿入できました。
33
35
 
34
36
  Laravelが原因か確認するため、timestampのデフォルト値を0に戻し、以下のコードを実行したところ正常にinsertできました。
37
+ ```ここに言語を入力
35
38
  $dsn = "mysql:dbname=dev_db;host=127.0.0.1;charset=utf8mb4";
36
39
  $username = "root";
37
40
  $password = "";
38
41
  $pdo = new \PDO($dsn, $username, $password);
39
42
  $stmt = $pdo->exec("insert into servers (kind, address, db_name, note) values('1', '127.0.0.1', 'server1', 'test')");
43
+ ```
40
44
 
41
45
  ここまで確認するとLaravelが原因なのはほぼ間違いないと思いますが、対応策が分かりません。
42
- 恐らく、LaravelのDB::insertメソッド内で正常なtimestamp値の範囲であるかどうかをチェックしているのではないかと思いましたが、Laravelのソースコードが追えず、原因と対応策が分からない状態です。
46
+ 恐らく、LaravelのDB::insertメソッド内で正常なtimestamp値の範囲であるかどうかをチェックしているのではないかと思いましたが、Laravelのソースコードが追えず、原因と対応策が分からない状態です。
47
+
48
+ 質問の修正依頼に「SHOW CREATE TABLE servers;」の結果を、ということでしたので追記します。
49
+ +---------+------------------------------------------------------------
50
+ | Table | Create Table
51
+ +---------+------------------------------------------------------------
52
+ | servers | CREATE TABLE `servers` (
53
+ `id` int(11) NOT NULL AUTO_INCREMENT,
54
+ `kind` varchar(3) CHARACTER SET utf8 NOT NULL,
55
+ `address` varchar(15) CHARACTER SET utf8 NOT NULL,
56
+ `db_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
57
+ `note` text CHARACTER SET utf8,
58
+ `delete_flg` tinyint(1) NOT NULL DEFAULT '0',
59
+ `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
60
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
61
+ `updated_by` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
62
+ PRIMARY KEY (`id`)
63
+ ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1 |
64
+ +---------+------------------------------------------------------------
65
+ 1 row in set (0.00 sec)