質問編集履歴

6

文章を一部訂正

2022/08/27 03:39

投稿

nikuatsu
nikuatsu

スコア177

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

サブタイトルの修正

2022/08/27 03:37

投稿

nikuatsu
nikuatsu

スコア177

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

誤字

2022/08/27 03:34

投稿

nikuatsu
nikuatsu

スコア177

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

インデントを調整

2022/08/27 03:33

投稿

nikuatsu
nikuatsu

スコア177

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`) VALUES ('クワガタ');
48
+ INSERT INTO wp_names (`name`)
49
+ VALUES ('クワガタ');
49
50
  ```
50
51
  するとここではエラーにならず`wp_names`は次の内容となり、やはり`lang_id`に`0`が入ってしまいます。
51
52
 

2

インデントを調整

2022/08/27 03:33

投稿

nikuatsu
nikuatsu

スコア177

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

試したことにエラー条件を加筆

2022/08/27 03:32

投稿

nikuatsu
nikuatsu

スコア177

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