質問編集履歴

2

理由不明だが解決した方法(2022/03/14 23:09)

2022/03/14 14:08

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -169,4 +169,54 @@
169
169
 
170
170
  長い質問で申し訳ございませんが、どなたかWordPressにお詳しい方がいらっしゃいましたら何卒、宜しくお願い致します。
171
171
 
172
-
172
+ ### 理由不明だが解決した方法(2022/03/14 23:09)
173
+ 上記「// ロック解除」の処理を下記のようにしたところ、 **「厳密に」** `LOCK TABLES`もでき、errorMessage もなくなりました。しかしなぜ解決したのか?がわからずやはり不安な心境です。正しい処理なのか、他に問題はないのか、大いに疑問です。
174
+
175
+ 原因がお分かりになる方いらっしゃいましたらご教示頂けませんでしょうか。
176
+
177
+ ■ 上記「// ロック解除」の処理↓
178
+ ```php
179
+ // ロック解除
180
+ if( $is_error ){
181
+ $wpdb->query('ROLLBACK');
182
+ $wpdb->query('UNLOCK TABLES');
183
+ error_log( 'ROLLBACK しました' );
184
+
185
+ }else{
186
+ $wpdb->query('COMMIT');
187
+ $wpdb->query('UNLOCK TABLES');
188
+ error_log( 'COMMIT しました' );
189
+ }
190
+
191
+ } catch (Exception $e) {
192
+ $result = $e->getMessage();
193
+
194
+ } finally {
195
+ restore_error_handler();
196
+ }
197
+
198
+ return $result;
199
+ }
200
+ ```
201
+ ■ 理由不明だが解決した方法↓
202
+ ```php
203
+ // ロック解除
204
+ $wpdb->query('COMMIT');
205
+ error_log( 'COMMIT しました' );
206
+
207
+ } catch (Exception $e) {
208
+ $result = $e->getMessage();
209
+ $wpdb->query('ROLLBACK');
210
+ error_log( 'ROLLBACK しました' );
211
+
212
+ } finally {
213
+ restore_error_handler();
214
+ $wpdb->query('UNLOCK TABLES');
215
+ }
216
+
217
+ return $result;
218
+ }
219
+ ```
220
+
221
+
222
+

1

インデントの調整

2022/03/13 15:08

投稿

gorimaz
gorimaz

スコア26

test CHANGED
File without changes
test CHANGED
@@ -11,7 +11,7 @@
11
11
  今回はPHPのNoticeエラーの場合でも throw~catch し、`ROLLBACK`させたいのです。
12
12
 
13
13
  ### 発生している問題
14
- 該当のソースコードのように、Noticeエラーの場合でもそれを`throw~catch`させようして`set_error_handler`を書きました。
14
+ 該当のソースコードのように、Noticeエラーの場合でもそれを throw~catch させようして`set_error_handler`を書きました。
15
15
 
16
16
  しかしこうすると次の errorMessage のように、なぜか`wp_options`や`wp_comments`の`LOCK TABLES`を要求されます。
17
17
 
@@ -39,15 +39,15 @@
39
39
  問題のソースコードは後述の`update()`で生じます。
40
40
  ```SQL
41
41
  CREATE TABLE my_texts (
42
- ID BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT
42
+ ID BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT
43
- ,text VARCHAR(10) NOT NULL
43
+ ,text VARCHAR(10) NOT NULL
44
44
  ,PRIMARY KEY (ID)
45
45
  );
46
46
  INSERT INTO my_texts (text) VALUES ('text a');
47
47
 
48
48
  CREATE TABLE my_tags (
49
- ID BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT
49
+ ID BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT
50
- ,tag VARCHAR(10) NOT NULL
50
+ ,tag VARCHAR(10) NOT NULL
51
51
  ,PRIMARY KEY (ID)
52
52
  );
53
53
  INSERT INTO my_tags (tag) VALUES ('tag a');