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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

1213閲覧

PHP Fatal error: Call to a member function fetchRow()でサイトが表示されない

pond

総合スコア350

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

1グッド

0クリップ

投稿2020/10/07 03:38

解決したいこと

下記エラーでAWS環境が表示できない状況でAmazon RDS MariaDBのパラメータ周りを疑っています。
RDSで利用できないパラメータ、設定が必要なパラメータ等ご知見お持ちでしたらご教示頂けないでしょうか。

DBサーバのバージョンは異なりますが、MariaDB 10.5.5が動いている他サーバ(AWS環境ではありません)
では当該エラーはでず、サイトは正常に表示されます。
正常に表示されるサイトのほうのApache・OS・PHPバージョンはエラーがでているAWS環境と同じです。

発生している問題・エラーメッセージ

PHP Fatal error: Call to a member function fetchRow() on boolean in /opt/spf/htdocs/ja/usr-data/units/bSlideShow/bSlideShow.php on line 547

bSlideShow.php

).' asc'; 545 if (isset($this->_pageu_code) && is_numeric($this->_pageu_code)) { 546 $result = $this->db->prepare($sql, $this->_pageu_code); 547 $firstRow = $result->fetchRow(DB_FETCHMODE_ASSOC); 548 $firstRow = $this->replaceMultipleData($firstRow, $this->column_link); 549 $rtn = $firstRow; 550 if (is_numeric($firstRow['umlt_code'])) { 551 $rtn['umlt'][] = $row = $this->setResult($firstRow); 552 while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) { 553 $row = $this->setResult($row); 554 $row = $this->replaceMultipleData($row, $this->column_link); 555 $rtn['umlt'][] = $row; 556 } 557 } 558 } 559 560 return $rtn; 561 }

PDOデータベース接続テストプログラム

PHP

1<?php 2//PDO設定 3$pdo_dsn = 'mysql:host=xxx-xxx-db.xxxxxx.ap-northeast-1.rds.amazonaws.com;dbname=xxx_xxxxx;charset=utf8;'; 4$pdo_user = 'spfdb'; 5$pdo_pass = '4dGKqE3W'; 6$pdo_option = array( 7 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 8 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 9 PDO::ATTR_EMULATE_PREPARES => false, 10 PDO::ATTR_STRINGIFY_FETCHES => false 11); 12//データベース接続 13try { 14 $pdo = new PDO($pdo_dsn, $pdo_user, $pdo_pass, $pdo_option); 15} catch (Exception $e) { 16 header('Content-Type: text/plain; charset=UTF-8', true, 500); 17 exit($e->getMessage()); 18} 19?> 20<!DOCTYPE html> 21<html> 22<head> 23<meta charset="UTF-8"> 24<title>PDO接続テスト</title> 25</head> 26<body> 27<?php 28//SQL発行 29$stmt = $pdo->query("SELECT @@version"); 30while ($row = $stmt->fetch()) { 31 print_r($row); 32} 33?> 34</body> 35</html>

確認したこと

・WEBサーバ(AmazonEC2)からmysqlコマンドでDBサーバ(AmazonRDS)へ接続できる
・WEBサーバにPDOデータベース接続テストプログラムを配置、接続できること
・WEBサーバにインストールしているPHP・PHPモジュール、ライブラリーは以下

oniguruma5php.x86_64 6.9.5+rev1-3.el7.remi @remi-safe php.x86_64 5.6.40-23.el7.remi @remi-php56 php-cli.x86_64 5.6.40-23.el7.remi @remi-php56 php-common.x86_64 5.6.40-23.el7.remi @remi-php56 php-devel.x86_64 5.6.40-23.el7.remi @remi-php56 php-gd.x86_64 5.6.40-23.el7.remi @remi-php56 php-mbstring.x86_64 5.6.40-23.el7.remi @remi-php56 php-mcrypt.x86_64 5.6.40-23.el7.remi @remi-php56 php-mysqlnd.x86_64 5.6.40-23.el7.remi @remi-php56 php-opcache.x86_64 5.6.40-23.el7.remi @remi-php56 php-pdo.x86_64 5.6.40-23.el7.remi @remi-php56 php-pecl-jsonc.x86_64 1.3.10-2.el7.remi.5.6 @remi-php56 php-pecl-jsonc-devel.x86_64 1.3.10-2.el7.remi.5.6 @remi-php56 php-pecl-zip.x86_64 1.19.1-1.el7.remi.5.6 @remi-php56

・DBサーバのバージョンは異なるがMariaDB 10.5.5の他サーバでは当該エラーはでず、サイトは正常に表示される
Apache・OS・PHPのバージョンはエラーがでているサイトと同じ

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

・PHP 5.6.4
・Apache 2.4.6
・MariaDB 10.4.13(Amazon RDS)
・bingo!CMS 1.7.0a
・CentOS7.8

phper.k👍を押しています

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

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

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

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

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

m.ts10806

2020/10/07 04:22 編集

$this->db->prepare() がどこで実行されているものか知りませんが、この結果がnullまたはbool(false)だからでは?
guest

回答1

0

ベストアンサー

Call to a member function fetchRow() on booleanですから

PHP

1 546 $result = $this->db->prepare($sql, $this->_pageu_code); 2 547 $firstRow = $result->fetchRow(DB_FETCHMODE_ASSOC);

ここの$resultfalseが入っちゃってるんだろうと思われます。
PDO::prepareの返り値の項参照

接続テストコードでは例外を捕まえるようになっていますが、本番では入っていないのではという気がします。

その原因を勘で探るのは大変なので、
自分がデバッグするならとりあえず(他のところで例外を握りつぶしていない確証が無い場合)

PHP

1 $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 2 try{ 3 $result = $this->db->prepare($sql, $this->_pageu_code); 4 $firstRow = $result->fetchRow(DB_FETCHMODE_ASSOC); 5 }catch(Exception $e){ 6 echo $e->getMessage(); 7 echo $e->getTraceAsString(); 8 die(); 9 }

として例外がthrowされていないかの確認をします。

投稿2020/10/07 04:14

tanat

総合スコア18727

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問