🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

Q&A

解決済

2回答

1917閲覧

PHP:関数 function ○○(){}が実行されない

hanemayu

総合スコア10

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

0グッド

0クリップ

投稿2019/12/19 13:28

編集2019/12/20 13:15

他の関数は取得できているが一部DBがらみの関数が実行後の表示が出来ていない

PHPでサイトを作っています。
追々tinywebエディタを入れてWEB上から更新できるようにしたいと思っていますのでDBからやり取りをする関数を模索しているのですが、ローカル◎ 本番× という状況になりました。

追記12/20 1:33
xampのローカルじゃなければのところで躓いているのかとも思いました。
https://teratail.com/questions/37010
こちらの質問に似た事をしようとしてるので、参考にしてできるか試してみようと思います。

エラーは出ず出力されていない。
DBに保存したページURLと現在のurlが一致したら表示という条件分岐を複雑にしないようにしました。
PHPの勉強で作っています。下記と同じ処理をしてファイルをincludeで読み込むという処理の関数も有り、どちらも実行ができていないのか?表示されません。
どなたかご教授お願いいたします。

表示先ページのファイル記述

以下のみ書いてローカルでは実行されています。

PHP

1<?php 2include_once 'function.php'; 3head(); 4titlechange(); 5title(); 6pages(); 7footer();

該当のソースコード

PHP

1function titlechange(){ 2 3 if($_SERVER['SERVER_NAME'] === 'localhost'){ 4 $huser = 'root'; 5 $hpass = ''; 6 7 try { 8 $pdo = new PDO('mysql:host=localhost;dbname=imxyz;charset=utf8',$huser,$hpass); 9 $dsn = $pdo->query('SELECT * FROM `page` LIMIT 0,30'); 10 $dsn->execute(); 11 $all = $dsn->fetchALL(); 12 13 foreach ($all as $key) { 14 // code... 15 $row = $key; 16 if($_SERVER['REQUEST_URI'] === '/'.$row['pageurl']){ 17 echo $row['titlename']; 18 } 19 } 20 if($_SERVER['REQUEST_URI'] === '/'){ 21 echo 'サイトネーム'; 22 } 23 $dsn = null; 24 $pdo = null; 25 26 } catch (PDOException $e) { 27 // エラーメッセージを表示させる 28 echo 'データベースにアクセスできません!' . $e->getMessage(); 29 30 // 強制終了 31 exit; 32 } 33 34 } 35

試したこと

エラーが出ないのでエラー表示の関数等試しましたがどれも出ませんでした。

補足情報(FW/ツールのバージョンなど)

PHP7.3(ローカルはxampp,本番はロリポップサーバー)
修正:12/20:xamp → xampp
mysql(バージョンは本番に合わせています。)

###修正分追記 12/20

php

1function titlechange(){ 2 echo $_SERVER['SERVER_NAME']; 3 if($_SERVER['SERVER_NAME'] === 'https://imaimayu.xyz'){ 4 5 try { 6 $huser = 'username'; 7 $hpass = 'pass'; 8 $pdo = new PDO('mysql:host=◯lolipop.lan;dbname=◯-immain;charset=utf8',$huser,$hpass); 9 $dsn = $pdo->query('SELECT * FROM `page` LIMIT 0,30'); 10 $dsn->execute(); 11 $all = $dsn->fetchALL(); 12 13 foreach ($all as $key) { 14 // code... 15 $row = $key; 16 if($_SERVER['REQUEST_URI'] === 'https://imaimayu.xyz/'.$row['pageurl']){ 17 echo $row['titlename']; 18 } 19 } 20 if($_SERVER['REQUEST_URI'] === 'https://imaimayu.xyz/'){ 21 echo 'IMAI MAYU'; 22 } 23 $dsn = null; 24 $pdo = null; 25 26 } catch (PDOException $e) { 27 // エラーメッセージを表示させる 28 echo 'データベースにアクセスできません!' . $e->getMessage(); 29 30 // 強制終了 31 exit; 32 } 33 34 35 }else{ 36 try { 37 $huser = 'root'; 38 $hpass = ''; 39 $pdo = new PDO('mysql:host=localhost;dbname=imxyz;charset=utf8',$huser,$hpass); 40 $dsn = $pdo->query('SELECT * FROM `page` LIMIT 0,30'); 41 $dsn->execute(); 42 $all = $dsn->fetchALL(); 43 44 foreach ($all as $key) { 45 // code... 46 $row = $key; 47 if($_SERVER['REQUEST_URI'] === '/02imai_master/'.$row['pageurl']){ 48 echo $row['titlename']; 49 } 50 } 51 if($_SERVER['REQUEST_URI'] === '/02imai_master/'){ 52 echo 'IMAI MAYU'; 53 } 54 $dsn = null; 55 $pdo = null; 56 57 } catch (PDOException $e) { 58 // エラーメッセージを表示させる 59 echo 'データベースにアクセスできません!' . $e->getMessage(); 60 61 // 強制終了 62 exit; 63 } 64 65 66 67 } 68 }

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

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

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

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

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

m.ts10806

2019/12/19 19:39 編集

細かいですが xampじゃなくてXAMPPですね(確かにもう1つのpは比較的使われないと言えば使われませんが)
guest

回答2

0

ベストアンサー

ちょっと何言ってるのかよくわかっていませんが、エラーが出ず、処理が実行されないのであれば、条件分岐で失敗しているのでは?

if($_SERVER['SERVER_NAME'] === 'localhost')
とか。

投稿2019/12/19 15:42

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hanemayu

2019/12/19 15:57

その行の{}else{}にして本番で動くように分岐をしていてローカルで確認しつつ本番でElseの処理が動くようにしてるんですが、本番だけ動かないんです。 ローカル用に描いたのを本番用にコピペして、DB情報だけ変更して使っていてもエラーなしで出力なしで、記述間違いが無いかも確認したのですが動きませんでした。 文章下手なので、うまく伝わらなくてすみません。
m.ts10806

2019/12/19 19:38

つまり本番とコードが違うと? 本番で動かないコードを提示されないと誰も答えられませんよ。 本番も提示と同じコードなのであれば動かないのはte2jiさんの回答の通りです。
hanemayu

2019/12/20 13:11

本番と処理コードは同じなんですが、ログイン情報出せないのでかつあいしてました><実際のコード修正して載せますすみません。
退会済みユーザー

退会済みユーザー

2019/12/20 16:02

echo $_SERVER['SERVER_NAME'];で確認したんであれば、解決しても良さげですけど? 初学者にオススメしているのはデバッグ環境作って、変数の変化を追ってみることですが、if の分岐を確認するだけであれば、if の直前で var_export(条件) とかやってみるのもわかりやすいです。
hanemayu

2019/12/21 00:32

var_export()ですね試してみます。 ありがとうございます
guest

0

お二方のコメントであれ?そもそもなところが書けていない等気づきが有り、大変助かりました。

もう少しDBもそうですがPHPの勉強を進めて聞く際にもエンジニアの皆さんに通じるように言葉など覚えていきます><;

結果的には以下にif文の条件を反対にして本番では一部動きました。

php

1if($_SERVER['SERVER_NAME'] === 'imaimayu.xyz'){ 2 本番時の処理 3}else{ローカル時の処理} 4

また不明な際にはちゃんとコードを用意してお伺いしようかと思います。
ありがとうございました

投稿2019/12/24 11:59

hanemayu

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問