###実現したいこと
テーブル接頭辞(wp_
)を省略した状態で、LOCK TABLES
を利かせたいです。
###発生している問題・エラーメッセージ
テーブル接頭辞(wp_
)を省略した状態で、LOCK TABLES
が効きません。
こちらのエラーとなります。「// 24行目」に対してのエラーです。
Table 'medias' was not locked with LOCK TABLES
###該当のソースコード
最初に御覧頂きたいのはこちらのソースコードです。
var_dump($gets);
はnull
となり、プラグイン「QeuryMonitor」によって上記エラーが確認できます。
php
1 2$gets = my_insert_wp_medias(); 3var_dump($gets); // -> null となる 4 5function my_insert_wp_medias(){ 6 global $wpdb; 7 8 /*----------------------------- 9 取得の処理 10 -----------------------------*/ 11 $sql = "LOCK TABLES wp_medias WRITE, wp_media_titles WRITE"; 12 $wpdb->query($sql); 13 14 if ( $wpdb->query($sql) === false ) return 'ロックできませんでした'; 15 16 $kind_id = 9; 17 $sql = " 18 SELECT medias.*, GROUP_CONCAT(media_titles.lang_id separator ',') as title_lang_ids 19 FROM wp_medias medias 20 LEFT JOIN wp_media_titles media_titles ON media_titles.medias_ID=medias.ID 21 WHERE medias.kind_id=$kind_id 22 GROUP BY medias.ID 23 "; 24 25 $gets = $wpdb->get_results( $sql ); // 24行目 26 if ( $wpdb->last_error ) { 27 $gets = $wpdb->last_error; 28 } else { 29 30 // 質問のためここで return を実行 31 $gets = '取得成功'; 32 return $gets; 33 34 /*----------------------------- 35 保存の処理 36 -----------------------------*/ 37 // 実際はここにINSERTなどが続きます 38}
###試したこと
まずエラーに従い、テーブルロックができていないのならそれを確認すべく上記コードにある次の一文を追加しましたが、これはreturn
されませんでした。よってLOCK TABLES
自体は成功していることになると思います。
if ( $wpdb->query($sql) === false ) return 'ロックできませんでした';
次によくよくエラーを見てみますとwp_medias
でなくmedias
となっていることに気が付きまして、$sql
を次のように接頭辞(wp_
)を付けた状態で実行しましたら問題なく動作し、var_dump($gets);
は取得成功
となったのです。
$sql = " SELECT wp_medias.*, GROUP_CONCAT(wp_media_titles.lang_id separator ',') as title_lang_ids FROM wp_medias LEFT JOIN wp_media_titles wp_media_titles ON wp_media_titles.medias_ID=wp_medias.ID WHERE wp_medias.kind_id=$kind_id GROUP BY wp_medias.ID ";
これが大変疑問です。
たしかに接頭辞(wp_
)は省略しているものの、それはあくまでMySQLのエイリアス機能によるものであって、捜査対象のテーブルについては、該当のソースコードでも接頭辞(wp_
)をつけて指定しているはずです。
なのにどうして先のようなエラーとなってしまうのでしょうか?
質問ですが、接頭辞(wp_
)を省略してはいけないなどのルールがあるのでしたらソースを知りたいですし、もし省略してもできる方法があればそれをお尋ねできれば幸いです。
補足情報
ご不要とは思いますがCREATE
とINSERT
のサンプルを掲載させていただきます。
SQL
1CREATE TABLE wp_medias (`ID` int, `kind_id` int); 2INSERT INTO wp_medias (`ID`, `kind_id`) 3VALUES (10, 9), (11, 9), (12, 9), (13, 9); 4 5CREATE TABLE wp_media_titles (`medias_ID` int, `lang_id` int, `title` varchar(3)); 6INSERT INTO wp_media_titles (`medias_ID`, `lang_id`, `title`) 7VALUES (10, 1, 'a'), (10, 2, 'エー'), (11, 1, 'b'), (12, 1, 'c'), (13, 2, 'ディー'); 8 9 10 11
回答1件
あなたの回答
tips
プレビュー