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

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

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

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

PHP

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

Q&A

解決済

2回答

1446閲覧

PDO(?)に関するエラーについて

ToruOkada

総合スコア16

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

PHP

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

0グッド

0クリップ

投稿2017/10/04 13:56

Heroku cliにてログを確認したところ次のようなエラーが発生していました。

[04-Oct-2017 13:28:45 UTC] PHP Fatal error: Call to a member function prepare() on null in /app/index.php on line 118

コードは、次の通りです。

lang

1//ユーザーをデータベースに登録する 2function registerUser($userId, $stones) { 3 $dbh = dbConnection::getConnection(); 4 $sql = 'insert into '. TABLE_NAME_STONES .' (userid, stone) values(pgp_sym_encrypt(?, \'' . getenv('DB_ENCRYPT_PASS') . '\'), ?) ' ; 5 $sth = $dbh->prepare($sql); 6 $sth->execute(array($userId, $stones)); 7} 8 9//ユーザー情報を更新 10function updateUser($userId, $stones) { 11 $dbh = dbConnection::getConnection(); 12 $sql = 'update ' . TABLE_NAME_STONES . ' set stone = ? where ? = pgp_sym_decrypt(userid, \'' . getenv('DB_ENCRYPT_PASS') . '\')'; 13 $sth = $dbh->prepare($sql); 14 $sth->execute(array($stones, $userId)); 15} 16 17// ユーザーIDを元にデータベースから情報を取得 18function getStonesByUserId($userId) { 19 $dbh = dbConnection::getConnection(); 20 $sql = 'select stone from ' . TABLE_NAME_STONES . ' where ? = pgp_sym_decrypt(userid, \'' . getenv('DB_ENCRYPT_PASS') . '\')'; 21 $sth = $dbh->prepare($sql); 22 $sth->execute(array($userId)); 23 // レコードが存在しなければNULL 24 if (!($row = $sth->fetch())) { 25 return PDO::PARAM_NULL; 26 } else { 27 // 石の配置を連想配列に変換し返す 28 return json_decode($row['stone']); 29 } 30} 31

下から10行目のprepareに対してエラーが発生しているようです。
色々試しましたが解決できませんでした。
どなたか分かる方教えていただけると嬉しいです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

Call to a member function prepare() on null

って書いてある通り、null に対してメンバメソッド prepare() を実行しようとしてるぞ! って言われてるのです。

つまり、$dbh が null なわけで、

PHP

1$dbh = dbConnection::getConnection();

こいつが失敗してるってことでですね。

なんで失敗してるかは他も見ないとわからんすねー。

投稿2017/10/05 00:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

そもそもgetConnectionにてコネクションは確立できているのでしょうか?
またはPDOオブジェクトのnewはできているのか、ご確認ください。

追記:
念のため、dbConnection::getConnection()から得たpdoコネクションを利用している
他の行でも同様のエラーが出ていないかご確認ください。
同様の結果であれば、pdoオブジェクトが作られていないのにprepare()を利用しているものと思われます。
※dbConnection::getConnection()のソースコードをご提示いただければその判断が可能です。

投稿2017/10/05 00:04

編集2017/10/05 00:18
m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2017/10/05 00:09

> そもそもgetConnectionにてコネクションは確立できているのでしょうか? getConnection() なんていうメソッド名は、普通、接続を確立するメソッドには付けないよなぁ…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問