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

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

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

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

Q&A

解決済

1回答

804閲覧

Wordpressで他のデータベースと繋げたい

coinbura

総合スコア106

WordPress

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

0グッド

1クリップ

投稿2018/01/25 08:57

Wordpressで他のデータベースと繋げる為、以下を参考にしてファイルを作成しました。

http://tech.innovation.co.jp/2016/06/02/Word-Press-2.html

▼fanction.phpに記載

$another_db = new wpdb( ユーザー名, パスワード, DB名, ホスト名 );

▼ルートにtest.phpを作成して記載

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

これでテーブルboxの内容が出るのかなぁと思ったら、

Notice: Undefined variable: another_db in /var/www/html/example.com/test.php

というエラーが出て、「$another_dbが未定義」と怒られてしまいました。

色々調べては見たのですが、八方塞がりです。
ご教授頂けますでしょうか。
よろしくお願いいたします。

ちなみに、他のデータベースは同じサーバー内にあり、
new wpdb( ユーザー名, パスワード, DB名, ホスト名 )

new wpdb(root, pass, DB名, localhost)
といった形になっています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

test.phpがWordPressを読み込んでないのでは?
wp-load.phpをrequireしてください。

require_once('wp-load.php');

もし階層が違うなら合わせてください。


【追記】
すみませんよく読んでませんでした、テーマのfunctions.phpに定義したのなら
wp-load.phpじゃなくて/wp-include/template-loader.phpを読み込みます。

require_once('/wp-include/template-loader.php');

もしテーマ全体を読み込むのが好ましくないなら使用しているテーマフォルダのfunctions.phpのみrequireしてください。

投稿2018/01/25 09:05

編集2018/01/25 09:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

coinbura

2018/01/25 09:43

ありがとうございます! 少し進展しました。 ただ、 Warning: Missing argument 2 for wpdb::prepare(), called in /var/www/html/example.com/test.php on line 11 and defined in /var/www/html/example.com/wp-includes/wp-db.php on line 1222 というエラーが出て、「prepare()の引数2がありません」と怒られてしまいました。 引数が必要とも思えないですし、何か他の原因があるのでしょうか?
coinbura

2018/01/25 14:14 編集

情報ありがとうございます! 色々調べて今現在格闘しています! やっとプレースホルダーの使い方がなんとなく分かってきたので、 $table = box; $id = 4; $users = $another_db->get_results($another_db->prepare(" SELECT * FROM %s WHERE id = %d ",$table,$id)); とするも$userに値が入らず…。 「SQL 文字定数の中で % を使う場合、LIKE のワイルドカードも含めて、 %% のように二重の % を書いてエスケープしなければなりません」 とのことだったので、 SELECT * FROM %%s id = %%d としても値が入らず…。 お手上げ状態です(w_-;
退会済みユーザー

退会済みユーザー

2018/01/26 02:59 編集

後者は%を使う場合にエスケープする話なので前者で合ってると思います ちょっとSQLには詳しくないので分からないのですが、 prepare を使う場合は get_results ではなく query を用いる必要があるのでは? $users = $another_db->query(... として試してみてください。
coinbura

2018/01/26 13:57

$users = $another_db->query(...  ダメでした。 とりあえずは、 $users = $another_db->get_results($another_db->prepare(" SELECT * FROM box ","")); と、ダミーの引数を入れる事で、一応値を取得する事ができました。 セキュリティ上はダメなんでしょうけど(^^A
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問