herokuでMySQLを使ったPHPをデプロイしたが、SELECT文を使用したページだけ表示されない。
初めまして、こんばんは。
最近PHPを勉強し始め、フィットネスに関するブログやアプリケーションを提供するウェブサイトを作っております。
herokuでデプロイするとSELECT文を使っているページのみサイドバーが表示されるだけです。
XAMPPを利用したローカル環境(localhost)では上手く表示されます。
今朝から格闘していますが、一人では解決できないと感じたので、ここで質問をさせていただきます。
今ある主なページとしては、以下の通りです。
- index.php(ブログ記事をデータベースからSELECTして表示しているため表示されません。)
- blog.php(同上)
- portfolio.html(こちらはJavascriptで作成したアプリを使用できるページになっており、うまく表示されます。)
- contact.php(利用者が質問を送信するためのページです。INSERT文をしようしていますが、表示されます。また、入力して送信すると、データベースに入力されたデータが挿入されたことを確認できました。)
このように、SELECT文を使用したページだけ表示されません。
ぜひ、ご教授していただけると幸いです。
発生している問題・エラーメッセージ
herokuでMySQLを使ったPHPをデプロイしましたが、SELECT文を使用したページだけ表示されません。 エラーメッセージは表示されず、上述したページ(index.phpとblog.php)だけサイドバーが表示されるだけです。 二つのページに共通することはSELECT文を利用していることです。 *INSERT文を利用しているcontact.phpは表示され、さらにはデータベースにもデータを挿入することができました。 XAMMPを利用したローカル環境では、うまく表示されているので、herokuデプロイ時に失敗したものだと思われます。 参考にしたページは[こちら](https://scotch.io/@phalconVee/deploying-a-php-and-mysql-web-app-with-heroku)です。
該当のソースコード
php
1index.php 2 3<?php 4 require('dbconnect.php'); 5 $sql = 'SELECT * FROM `posts` ORDER BY post_id DESC'; 6 7 8 //SQL実行 9 $stmt = $dbh->prepare($sql); 10 $stmt->execute(); 11 12 //データ取得 13 while ($record = $stmt->fetch(PDO::FETCH_ASSOC)) { 14 $posts[] = array( 15 "post_id"=>$record['post_id'], 16 "title"=>$record['title'], 17 "content"=>$record['content'], 18 "picture_path"=>$record['picture_path'], 19 "created"=>$record['created'] 20 ); 21 } 22?> 23途中省略 24<div class="fh5co-narrow-content"> 25 <h2 class="fh5co-heading animate-box" data-animate-effect="fadeInLeft">Read My Blog</h2> 26 <div class="row row-bottom-padded-md"> 27 <?php foreach ($posts as $post) { ?> 28 <div class="col-md-3 col-sm-6 col-padding animate-box" data-animate-effect="fadeInLeft"> 29 <img src="member_picture/<?php echo $post['picture_path']; ?>" width="150" height="150"> 30 </div> 31 <div class="col-md-9 col-padding animate-box" data-animate-effect="fadeInLeft"> 32 <h3><?php echo $post['title'] ?></h3> 33 <span><b> <i class="icon-comment"></i><?php echo $post['created'] ?></b></span></br> 34 <h4><?php echo mb_substr(strip_tags($post['content']),0,50).'...'; ?></h4> 35 <a href="show.php?no=<?php echo $post['post_id']; ?>" class="lead">Read More <i class="icon-arrow-right3"></i></a><hr style="border:0;border-top:1px solid;"> 36 </div> 37 <?php } ?> 38 </div>
php
1dbconnect.php 2 3<?php 4 $dsn = 'mysql:dbname=データベース名;host=ホスト名'; 5 $user = 'ユーザー名'; 6 $password='パスワード'; 7 $dbh = new PDO($dsn, $user, $password); 8 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 9 $dbh->query('SET NAMES utf8'); 10?>
heroku logsをした結果、長いのでエラーが出ているところだけ抜粋させていただきます。
2019-01-04T08:33:42.909274+00:00 app[web.1]: [04-Jan-2019 08:33:42 UTC] PHP Fatal error: Uncaught Error: Call to undefined function mb_substr() in /app/index.php:219 2019-01-04T08:33:42.909291+00:00 app[web.1]: Stack trace: 2019-01-04T08:33:42.909293+00:00 app[web.1]: #0 {main} 2019-01-04T08:33:42.909359+00:00 app[web.1]: thrown in /app/index.php on line 219
2019-01-04T08:33:50.425259+00:00 app[web.1]: [04-Jan-2019 08:33:50 UTC] PHP Fatal error: Uncaught Error: Call to undefined function mb_substr() in /app/blog.php:134 2019-01-04T08:33:50.425341+00:00 app[web.1]: Stack trace: 2019-01-04T08:33:50.425346+00:00 app[web.1]: #0 {main} 2019-01-04T08:33:50.425422+00:00 app[web.1]: thrown in /app/blog.php on line 134
2019-01-04T08:43:03.853297+00:00 app[web.1]: [04-Jan-2019 08:43:03 UTC] PHP Fatal error: Uncaught Error: Call to undefined function mb_substr() in /app/index.php:219 2019-01-04T08:43:03.853834+00:00 app[web.1]: Stack trace: 2019-01-04T08:43:03.853837+00:00 app[web.1]: #0 {main} 2019-01-04T08:43:03.853839+00:00 app[web.1]: thrown in /app/index.php on line 219 2019-01-04T08:43:03.853841+00:00 app[web.1]: [04-Jan-2019 08:43:03 UTC] PHP Fatal error: Uncaught Error: Call to undefined function mb_substr() in /app/blog.php:134 2019-01-04T08:43:03.853844+00:00 app[web.1]: Stack trace: 2019-01-04T08:43:03.853845+00:00 app[web.1]: #0 {main} 2019-01-04T08:43:03.853847+00:00 app[web.1]: thrown in /app/blog.php on line 134
index.php:219とblog.php:134のいずれにおいても以下がコードになります。
<div class="desc"> <h3><?php echo $post['title'] ?></h3> <span><b> <i class="icon-comment"></i><?php echo $post['created'] ?></b></span></br> <h4><?php echo mb_substr(strip_tags($post['content']),0,50).'...'; ?></h4> <a href="show.php?no=<?php echo $post['post_id']; ?>" class="lead">Read More <i class="icon-arrow-right3"></i></a><hr style="border:0;border-top:1px solid;"> </div>
試したこと
データベースに繋がっていることは確認できました(上述したように、INSERT文を利用してデータをherokuで利用しているデータベースに挿入できたため)。
Herokuには画像ストレージが標準で装備されていないとあるウェブサイトに書かれていたので、画像に関するコードを全て削除してデプロイしたが、結果は同じでした。
補足情報(FW/ツールのバージョンなど)
PHP 7.1.19
cleardbを使用しています。
以上です。何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー