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

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

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

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

PHP

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

Q&A

解決済

3回答

2566閲覧

[WordPress] INSERT INTO文をまとめた関数がローカル環境で動くが、ST環境では動かない

spellbound

総合スコア190

WordPress

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

PHP

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

0グッド

1クリップ

投稿2017/06/27 11:26

編集2017/06/28 03:08

php

1function insertDataToAccommodationsTable($acmData, $wpdb) { 2 extract($acmData); 3 $wpdb->query( 4 $wpdb->prepare( 5 " 6 INSERT INTO $wpdb->accommodations 7 ( 8 acm_id, 9 acm_nm, 10 pref_nm, 11 area_nm, 12 latitude, 13 longitude, 14 hotel_inn_cd, 15 acm_sale_cd, 16 updated_at 17 ) 18 VALUES 19 ( 20 %s, 21 %s, 22 %s, 23 %s, 24 %s, 25 %s, 26 %s, 27 %s, 28 %s 29 ) 30 ON DUPLICATE KEY UPDATE 31 acm_id = VALUES(acm_id), 32 acm_nm = VALUES(acm_nm), 33 pref_nm = VALUES(pref_nm), 34 area_nm = VALUES(area_nm), 35 latitude = VALUES(latitude), 36 longitude = VALUES(longitude), 37 hotel_inn_cd = VALUES(hotel_inn_cd), 38 acm_sale_cd = VALUES(acm_sale_cd), 39 updated_at = VALUES(updated_at) 40 ", 41 array( 42 $acmId, 43 $acmNm, 44 $prefNm, 45 $areaNm, 46 $latitude, 47 $longitude, 48 $hotelInnCd, 49 $acmSaleCd, 50 $updatedAt 51 )) 52 ); 53}

php

1function insertDataToTermsTable($acmData, $wpdb) { 2 extract($acmData); 3 $encodedAcmNm = rawurlencode($acmNm); 4 $wpdb->query( 5 $wpdb->prepare( 6 " 7 INSERT INTO $wpdb->terms 8 ( 9 name, 10 slug, 11 term_group 12 ) 13 VALUES 14 ( 15 %s, 16 %s, 17 %d 18 ) 19 ON DUPLICATE KEY UPDATE 20 name = VALUES(name), 21 slug = VALUES(slug), 22 term_group = VALUES(term_group) 23 ", 24 array( 25 $acmNm, 26 $encodedAcmNm, 27 0 28 )) 29 ); 30}

こちらのコードだったら動きます...
うまくいっていないコードとほとんど同じです。

どうしても動きません。
お願いします...

この関数がステージング環境では動きませんでした。
ローカル環境とステージング環境の違いはサーバーがさくらVPSかローカルかの違いだけです。
テーブルの定義も確認しましたが、全く一緒でした。

こちらのコードに$queryをvar_dumpしました。
そうすると、bool(false)が帰ってきていました。
何かアドバイスがあったらお願いします。。。

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

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

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

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

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

guest

回答3

0

ローカル環境とステージング環境の違いはサーバーがさくらVPSかローカルかの違いだけです

という事は、データベースやPHPのバージョン,設定ファイルそして、OSの種類・バージョンも統一されているはずなので、原因を直観的に推測できずに申し訳ありません。

とりあえず、クエリをシンプルなもの(例:セレクト文)にして、データを取得してくれるかをまず確認します。

シンプルなクエリでうまくいくなら、次はプレイスホルダーをやめて直書きのクエリにして確認します。

それでうまくいくならば、プレイスホルダーにして、渡す値を変数ではなく直書きにして確認します。

この3つを試してみれば、何かわかるかもしれません。

投稿2017/06/27 15:13

yukikp

総合スコア797

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

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

spellbound

2017/06/28 03:07

何も進展がありませんでした...。
yukikp

2017/06/28 04:06

いや、その結果を教えていただければ、こちらからアドバイスできることが増えるかもしれない=何かわかるかもしれません という意味です。 結果どうでしたか?
spellbound

2017/06/28 04:30

追記したコードを見て頂きたいんですが、insertDataToTermsTable()関数は問題なく動作しています。ずっと正常に動かないinsertDataToAccommodationsTable()関数が何も変わりません。 どちらの関数も同じような動きをしています。 おそらくコード面に不備がないのではないかと思っています...。 とはいえ、テーブル定義もなんども確認していますが、おかしいようなところは見当たりません...。
yukikp

2017/06/28 05:22

渡す値を変数ではなく直書きにしても動きませんか?
yukikp

2017/06/28 07:01

実際に行われているクエリを以下のようにechoで出力&コピーし、その内容をmysqlのコマンドラインや、phpMyAdminのようなツールで直接実行させると同でしょう。 function insertDataToAccommodationsTable($acmData, $wpdb) { extract($acmData); $sql = $wpdb->prepare( " INSERT INTO $wpdb->accommodations ( acm_id, acm_nm, pref_nm, area_nm, latitude, longitude, hotel_inn_cd, acm_sale_cd, updated_at ) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s ) ON DUPLICATE KEY UPDATE acm_id = VALUES(acm_id), acm_nm = VALUES(acm_nm), pref_nm = VALUES(pref_nm), area_nm = VALUES(area_nm), latitude = VALUES(latitude), longitude = VALUES(longitude), hotel_inn_cd = VALUES(hotel_inn_cd), acm_sale_cd = VALUES(acm_sale_cd), updated_at = VALUES(updated_at) ", array( $acmId, $acmNm, $prefNm, $areaNm, $latitude, $longitude, $hotelInnCd, $acmSaleCd, $updatedAt )); echo $query; $wpdb->query($sql); }
guest

0

とりあえず、無事に解決できたという事でよかったです!

ローカル環境とステージング環境の違いはサーバーがさくらVPSかローカルかの違いだけです。

この点が気になるのですが、なぜローカルでは動いたのでしょう?

投稿2017/06/28 08:45

yukikp

総合スコア797

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

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

spellbound

2017/06/28 08:55

デザイナーさんと共同で作業しており、自分はGIthub管理を想定して進めていました。しかし、デザイナーさんがFTPで手動でファイルをいじっていたりしてた模様で、ステージング環境だけ少し古い状態になっており、コンフリクトを起こしていました。 wp-db.phpはテーブル定義した際、変えたはずだと思っていたので、ずっと直らないという現象が起きていました。本当にすみませんでした。。。
yukikp

2017/06/29 02:31

いえいえ!そういうパターンもあるんだなと、こちらも勉強になります。 色々面倒な検証をお願いした割には、政界を導き出せずすみませんでした。
guest

0

自己解決

WordPress上で独自テーブルを定義した場合は、wp-db.phpに書き込まなければならないかと思います。それを忘れており、記載したところ正常に動作しました。
yukikpさんには何度も質問に答えて頂きましたが、質問の前提を勘違いしており、無駄なお時間を取ってしまったかと思います。本当に申し訳ありません...。本当にご回答して下さりありがとうございました。

投稿2017/06/28 08:19

spellbound

総合スコア190

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問