質問編集履歴
6
文章を一部訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -79,4 +79,4 @@
|
|
79
79
|
MySQL 5.7.31
|
80
80
|
phpMyAdmin 4.4.15.10
|
81
81
|
|
82
|
-
この問題の原因がお分かりになる方がいらっしゃいましたら宜しくお願い致します。
|
82
|
+
この問題の原因と、そして防ぐ方法がお分かりになる方がいらっしゃいましたら宜しくお願い致します。
|
5
サブタイトルの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,6 +10,8 @@
|
|
10
10
|
該当のソースコードにあるように `lang_id`カラムを指定せず`INSERT`すると、勝手に`0`が入ってしまいます。
|
11
11
|
|
12
12
|
### 該当のソースコード
|
13
|
+
##### ■CREATE
|
14
|
+
|
13
15
|
まずこちらphpMyAdminから実行し `CREATE` 致しました。
|
14
16
|
```SQL
|
15
17
|
CREATE TABLE `wp_names` (
|
@@ -19,6 +21,8 @@
|
|
19
21
|
PRIMARY KEY (`ID`)
|
20
22
|
);
|
21
23
|
```
|
24
|
+
##### ■INSERT
|
25
|
+
|
22
26
|
続いて次のようにphpで`lang_id` を未指定で実行しますと`1`が返り、`INSERT`が成功します。
|
23
27
|
```php
|
24
28
|
global $wpdb;
|
@@ -28,12 +32,17 @@
|
|
28
32
|
$result = $wpdb->insert( $wpdb->prefix.$table, $newdata, $format );
|
29
33
|
var_export($result); // 1 が返る
|
30
34
|
```
|
35
|
+
|
36
|
+
##### ■問題の確認
|
37
|
+
|
31
38
|
成功したことについて「`lang_id`には何が入ったんだ?」と疑問を感じ、phpMyAdminで`SELECT * FROM wp_names;`を見てみると次の結果で、このように未指定の`lang_id`に対し、勝手に`0`が入ってしまうという問題が確認されました。
|
32
39
|
|ID|lang_id|name|
|
33
40
|
|:--:|:--:|:--:|
|
34
41
|
|1|0|カブトムシ|
|
35
42
|
|
36
43
|
### 試したこと
|
44
|
+
##### ■SQLFiddleでのINSERT
|
45
|
+
|
37
46
|
まず、未指定のカラムに勝手に`0`が入るのは、MySQLの本来の仕様なのか?を確認すべく、SQLFiddleをお借りして実行してみました。こちらです。
|
38
47
|
http://sqlfiddle.com/#!9/381c0f
|
39
48
|
|
@@ -42,6 +51,8 @@
|
|
42
51
|
INSERT INTO wp_names (`name`)
|
43
52
|
VALUES ('みかん');
|
44
53
|
```
|
54
|
+
|
55
|
+
##### ■phpMyAdminでのINSERT
|
45
56
|
|
46
57
|
次に、未指定のカラムに勝手に`0`が入るのは、`$wpdb->insert()`の仕様なのか?を確認すべく、phpで`$wpdb->insert()`を実行するのではなく、phpMyAdminから次の`INSERT`を実行してみました。
|
47
58
|
```SQL
|
@@ -55,6 +66,8 @@
|
|
55
66
|
|1|0|カブトムシ|
|
56
67
|
|2|0|クワガタ|
|
57
68
|
|
69
|
+
##### ■考察
|
70
|
+
|
58
71
|
以上のように、未指定は本来エラーだが、私の環境では勝手に`0`が入ってしまうものかと思われます。
|
59
72
|
|
60
73
|
しかしその原因が発見できません。「MySQL のあるバージョンでは勝手に`0`が入る」などがリファレンスマニュアルにあるかと思ったのですが見当たらず…。
|
4
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -34,10 +34,10 @@
|
|
34
34
|
|1|0|カブトムシ|
|
35
35
|
|
36
36
|
### 試したこと
|
37
|
-
まず、未指定のカラムに勝手に`0`が入るのは、MySQLの仕様なのか?を確認すべく、SQLFiddleをお借りして実行してみました。こちらです。
|
37
|
+
まず、未指定のカラムに勝手に`0`が入るのは、MySQLの本来の仕様なのか?を確認すべく、SQLFiddleをお借りして実行してみました。こちらです。
|
38
38
|
http://sqlfiddle.com/#!9/381c0f
|
39
39
|
|
40
|
-
上記SQLFiddleにさらに次を記載すると`'みかん'`の`INSERT`でエラーとなり、どうやら
|
40
|
+
上記SQLFiddleにさらに次を記載すると`'みかん'`の`INSERT`でエラーとなり、どうやら本来はエラーになるもののように思われます。
|
41
41
|
```SQL
|
42
42
|
INSERT INTO wp_names (`name`)
|
43
43
|
VALUES ('みかん');
|
3
インデントを調整
test
CHANGED
File without changes
|
test
CHANGED
@@ -45,7 +45,8 @@
|
|
45
45
|
|
46
46
|
次に、未指定のカラムに勝手に`0`が入るのは、`$wpdb->insert()`の仕様なのか?を確認すべく、phpで`$wpdb->insert()`を実行するのではなく、phpMyAdminから次の`INSERT`を実行してみました。
|
47
47
|
```SQL
|
48
|
-
INSERT INTO wp_names (`name`)
|
48
|
+
INSERT INTO wp_names (`name`)
|
49
|
+
VALUES ('クワガタ');
|
49
50
|
```
|
50
51
|
するとここではエラーにならず`wp_names`は次の内容となり、やはり`lang_id`に`0`が入ってしまいます。
|
51
52
|
|
2
インデントを調整
test
CHANGED
File without changes
|
test
CHANGED
@@ -39,11 +39,8 @@
|
|
39
39
|
|
40
40
|
上記SQLFiddleにさらに次を記載すると`'みかん'`の`INSERT`でエラーとなり、どうやら未指定は本来エラーになるもののように思われます。
|
41
41
|
```SQL
|
42
|
-
INSERT INTO wp_names
|
42
|
+
INSERT INTO wp_names (`name`)
|
43
|
-
(`name`)
|
44
|
-
VALUES
|
45
|
-
|
43
|
+
VALUES ('みかん');
|
46
|
-
;
|
47
44
|
```
|
48
45
|
|
49
46
|
次に、未指定のカラムに勝手に`0`が入るのは、`$wpdb->insert()`の仕様なのか?を確認すべく、phpで`$wpdb->insert()`を実行するのではなく、phpMyAdminから次の`INSERT`を実行してみました。
|
1
試したことにエラー条件を加筆
test
CHANGED
File without changes
|
test
CHANGED
@@ -37,7 +37,14 @@
|
|
37
37
|
まず、未指定のカラムに勝手に`0`が入るのは、MySQLの仕様なのか?を確認すべく、SQLFiddleをお借りして実行してみました。こちらです。
|
38
38
|
http://sqlfiddle.com/#!9/381c0f
|
39
39
|
|
40
|
-
すると`'みかん'`の`INSERT`でエラーとな
|
40
|
+
上記SQLFiddleにさらに次を記載すると`'みかん'`の`INSERT`でエラーとなり、どうやら未指定は本来エラーになるもののように思われます。
|
41
|
+
```SQL
|
42
|
+
INSERT INTO wp_names
|
43
|
+
(`name`)
|
44
|
+
VALUES
|
45
|
+
('みかん')
|
46
|
+
;
|
47
|
+
```
|
41
48
|
|
42
49
|
次に、未指定のカラムに勝手に`0`が入るのは、`$wpdb->insert()`の仕様なのか?を確認すべく、phpで`$wpdb->insert()`を実行するのではなく、phpMyAdminから次の`INSERT`を実行してみました。
|
43
50
|
```SQL
|