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

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

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

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

Q&A

解決済

1回答

233閲覧

Wordpressで他データベースの値を表示したい

coinbura

総合スコア106

WordPress

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

0グッド

0クリップ

投稿2018/01/27 09:31

編集2018/01/27 12:00

以下のようにして、Wordpressから他データベースの中身を引っ張ってきました。

$users = $another_db->get_results($another_db->prepare(" SELECT * FROM box ",""));

そしてその直下に
【1つ目】

echo $users[0][id];

というように記述しても、値が表示されません。

ただし、
【2つ目】

var_dump($users);

としてみたところ、値は確かに入っています。

【3つ目】

while($row = $users->fetch(PDO::FETCH_ASSOC)){ $piyo[] = $row; } echo $piyo[0][id];

としても、値は入らなかったです。

根本的にどこか間違っているような気もするのですが、何時間調べても堂々巡りでどうして良いか分かりません。

ご指摘・ご回答いただければ幸いです。
よろしくお願いいたします。

追記.
デバッグモードでのエラーは

1つ目は何も表示されず、出力もなし。

2つ目はエラーなしで、以下が表示される。

array(2) { [0]=> object(stdClass)#368 (2) { ["user_no"]=> string(1) "1" ["id"]=> string(3) "aaa" } [1]=> object(stdClass)#369 (2) { ["user_no"]=> string(1) "2" ["id"]=> string(4) "bbbb" } }

3つ目は
Fatal error: Uncaught Error: Call to a member function fetch() on array in /var/www/html/test.jp/test.php:14 Stack trace: #0 {main} thrown in /var/www/html/test.jp/test.php on line 14
というエラーが表示されます。(14行目は3つ目のコード)

追記2.
全体のコードは以下です。これ以外は何も記述していません。

<?php ini_set("display_errors", On); error_reporting(E_ALL); require_once('wp-load.php'); /*DB設定*/ $my_db = new wpdb('ユーザー名', 'パスワード','DB名', 'ホスト名'); // Select $users = $another_db->get_results($another_db->prepare("SELECT * FROM box","")); ここに3つのコードを入れた ?>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/01/27 09:34

デバッグモードで実行し、エラーメッセージを追記してください。
退会済みユーザー

退会済みユーザー

2018/01/27 11:54

「ここに3つのコードを入れた」どういう順番で、どう入れたのか手抜きせずに入れて。回答も適当にしていいのかい?
coinbura

2018/01/27 11:56

1つ目を入れて、その後にそれを消して2つ目を入れて、最後に2つ目を消して3つ目を入れました。
coinbura

2018/01/27 11:57

それぞれを保存してアップ→結果を見る。を3回繰返した形です。
退会済みユーザー

退会済みユーザー

2018/01/27 12:01

$usersに入った結果をどうしたいのですか?
coinbura

2018/01/27 12:02

配列として保存したいです。
退会済みユーザー

退会済みユーザー

2018/01/27 12:02

どこに?
coinbura

2018/01/27 12:04

$piyoに保存したいです。
coinbura

2018/01/27 12:05

もしかして、すでに$usersで目的の配列になっているのかなぁ、と考えて1つ目と2つ目のコードを記述しました。
guest

回答1

0

ベストアンサー

Call to a member function fetch() on array によると、

while($row = $users->fetch(PDO::FETCH_ASSOC)){

の部分が間違っていることになります。

fetch() は array のメンバではありません、と言うことになります。
fetch は PDOStatement クラスのメンバですから、配列のメンバでないことは明らかです。

コードは文脈で解釈する必要がありますから、問題の部分を含む一連のコードを提示してください。


php

1$users = $another_db->get_results($another_db->prepare(" 2 SELECT * 3 FROM box 4",""));

これで値が取れているんだったら、

php

1$users = $another_db->get_results($another_db->prepare(" 2 SELECT * 3 FROM box 4","")); 5 6$piyo = $users;

とするだけじゃないんですか?


php

1$users = $another_db->get_results($another_db->prepare(" 2 SELECT * 3 FROM box 4","")); 5 6echo $users[0]["id"];

投稿2018/01/27 11:46

編集2018/01/27 12:15
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

coinbura

2018/01/27 12:08

echo $users[0][id]; で、何も表示されていないので、値がとれていないのかと思います。
退会済みユーザー

退会済みユーザー

2018/01/27 12:10 編集

var_dump($users);の結果が取れているんだったら、取れているでしょ? となみに、$users[0][id]; →$users[0]["id"];
coinbura

2018/01/27 12:11

なので、困っています。 var_dump($users);でとれるのに、echo $users[0][id];では表示されないのはなぜなのでしょうか。
退会済みユーザー

退会済みユーザー

2018/01/27 12:11

$users[0]["id"];
coinbura

2018/01/27 12:13

うーん、ダメでした。
退会済みユーザー

退会済みユーザー

2018/01/27 12:14

引用符がないとダメでしょ
coinbura

2018/01/27 12:22

$users[0]["id"];としたところ、以下のようなエラー分が出てきました。 Fatal error: Uncaught Error: Cannot use object of type stdClass as array in /var/www/html/test.jp/test.php:14 Stack trace: #0 {main} thrown in /var/www/html/test.jp/test.php on line 14
退会済みユーザー

退会済みユーザー

2018/01/27 12:23

$users[0]->id;
退会済みユーザー

退会済みユーザー

2018/01/27 12:28 編集

削除^^;
coinbura

2018/01/27 12:29

出た!出ました!! ありがとうございます!! 特殊な配列だった、、、ということなんですかね??? すみません。 どういったワードで調べれば、このような状況を回避する為の勉強をする事ができるかお教えいただけませんでしょうか?
退会済みユーザー

退会済みユーザー

2018/01/27 12:29

「Cannot use object of type stdClass as array」でググる
退会済みユーザー

退会済みユーザー

2018/01/27 12:31

「特殊な配列だった」ちがいます。 配列じゃないってことです。正確には、要素にStdClassを持つ配列です。
退会済みユーザー

退会済みユーザー

2018/01/27 12:31

「特殊な配列だった」ちがいます。 配列じゃないってことです。正確には、要素にStdClassを持つ配列です。
coinbura

2018/01/27 12:43

ありがとうございます! あとは、StdClassを持つ配列を配列にすれば完了ということですね。 明日1日かけて調べてみようと思います。
coinbura

2018/01/27 13:06 編集

合ってるかどうかは分からないけど、とりあえずできました! $piyo = (array)$users; $c = count($piyo); for($i=0;$i<$c;$i++){ $piyo[$i] = (array)$users[$i]; } 本当にありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問