質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2650閲覧

「$wpdb->insert」の直後、その投稿IDを取得する方法

marusankakun

総合スコア16

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/02/16 05:45

###実現したいこと
WordPressでオリジナルテーブルに$wpdb->insertでレコードを保存しています。下記のソースコードでそれは問題ありません。

その後に保存されたレコードから任意の値を取得したいです。

###発生している問題
保存はできているのにレコードから値を取得できません。

###ソースコード
上はwp_postsに保存していて、その後にIDが取得できています。

下のオリジナルテーブルwp_mypostsで保存ができても取得ができない状況です。

PHP

1// 保存も取得もできます。 2$test_num = 100; 3$values = [ 'post_content' => 'value' . $test_num ]; 4$id = my_insert_sql( 'wp_posts', $values ); 5var_dump( $id ); 6 7// 保存はできますが、取得ができません 8$test_num = 200; 9$values = [ 'mycolumn' => 'value' . $test_num ]; 10$id = my_insert_sql( 'wp_myposts', $values ); 11var_dump( $id );

尚、上の関数my_insert_sql()は以下の流れで保存されます。

php

1function my_insert_sql( $table, $update_info ){ 2 global $wpdb; 3 4 foreach ( $update_info as $v ) { 5 $format_arr[] = my_get_sql_format($v); 6 } 7 8 $wpdb->insert( $table, $update_info, $format_arr ); 9 return $wpdb->insert_id; 10} 11 12function my_get_sql_format( $v ){ 13 $format; 14 $type = gettype( $v ); 15 if ( $type == 'string' ) { 16 $format = '%s'; 17 } elseif ( $type == 'integer' ) { 18 $format = '%d'; 19 } 20 return $format; 21}

###試したこと
上記my_insert_sql()で、最後の
return $wpdb->insert_id;
となっているところが原因と考えています。

この戻り値はwp_postsテーブルにしか使えないのでしょうか?

そう思い以下のように試してみましたが、できません。
return $wpdb->mypostid;

さらにstackoverflowを参考に以下のように試してみましたが、できません。
return $wpdb->Auto_increment;

尚、mypostidのカラムはプライマリーキーで、かつAUTO_INCREMENTがかかっています。

どうすれば、wp_mypostsのテーブルに対してmy_insert_sql()で保存されたレコードから、mypostidのカラムの値(またはそれ以外の任意の値)を取得できますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/16 06:54

ご提示のコードでデータベースに登録されたmypostidの値(AUTO_INCREMENTされた値)がvar_dumpされることを確認できたので、ご提示のコードの範囲内では問題がないように見受けられます。 marusankakunさんが確認した結果で「取得ができません」と書かれていますが、NULLとか空文字列が返ってくるということですか? var_dumpした際に具体的にどんな表示になるのかを、質問文に記載していただけますか?
marusankakun

2020/02/16 07:45

申し訳ございません。こちらの確認不足で質問のコードで問題なく取得できておりました。確認の機会を下さった意味でベストアンサーを差し上げたいのですが、同じ内容で結構ですので回答としてご投稿いただけますでしょうか。
guest

回答2

0

自己解決

申し訳ございません。こちらの確認不足で質問のコードで問題なく取得できておりました。当質問は削除申請中です。

投稿2020/03/04 04:54

marusankakun

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2020/02/16 06:33

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marusankakun

2020/02/16 06:52 編集

保存後に SHOW TABLE STATUS LIKE 'wp_myposts' を実行して、得た値から-1することで投稿されたIDを取得するということですか? その分リクエストが増えまし、何より保存のタイミングが重なった場合に正確性を欠くのではないでしょうか? できれば return $wpdb->insert_id; の処理の流れのままできればと思っているのですが、やはりこの処理はwp_postsにしか使えませんかね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問