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

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

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

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

12178閲覧

cakephp3のDB接続について

WADA1234

総合スコア25

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/09/24 04:11

こんにちは。

エラーが消えずに困っています。

わかる方がいましたらご教授ください。

cakephp3でプロジェクトを作成しherokuにデブロイしました。

mysqlを使用したいのでClearDBをインストールいたしました。

しかしcakephpからDBの接続がうまく行かずに下記の様なエラーが出てしまします。

CakePHP is NOT able to connect to the database. Connection to database could not be established: SQLSTATE[HY000] [1045] Access denied for user 'adffdadfxxxx'@'ip-xx-xx-147-183.ec2.internal' (using password: YES)

app.phpが原因だと思いますが
下記の設定にしてもエラーは消えません。

app.php $db = parse_url(env('CLEARDB_DATABASE_URL')); 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => $db['host'], 'username' => $db['user'], 'password' => $db['pass'], 'database' => substr($db['path'], 1), 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, 'quoteIdentifiers' => false, ],

開発環境はcloud9

サーバーはheroku

DBはclearDB

を使用しております。

sequel Proというデータベース接続ツールからはアクセスすることができました。
またphpからのアクセスもアクセスできる事を確認しました。

$db = parse_url(getenv("CLEARDB_DATABASE_URL")); $server = $db["host"]; $username = $db["user"]; $password = $db["pass"]; $db1 = substr($db["path"], 1); $link = mysqli_connect($server, $username, $password, $db1); $result = mysqli_query($link, "select * from users");

原因がわかる方がいましたら、ご教授ください。よろしくお願い致します。

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

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

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

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

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

tato.aoki

2016/09/24 09:55

$dbをprint_rして結果を記載していただけますか? print_r($db);
tato.aoki

2016/09/24 09:56

$db["pass"]は伏せ字(仮の値で)記載して下さい
WADA1234

2016/09/24 14:25

お世話になります。 $dbの中身は下記の用になっております。 いかがでしょうか? Array ( [scheme] => mysql [host] => us-cdbr-iron-east-04.cleardb.net [user] => bf223ea294f0af [pass] => xxxxxxxx [path] => /heroku_0c82277f64c7d4b [query] => reconnect=true )
guest

回答2

0

ベストアンサー

以下のエラーは、自分の環境でためしたかぎり、usernameかpasswordが間違っている場合に発生しますね。
※hostが違ったり、権限がない場合は、別のメッセージでした。
ちなみにパスワードに記号は含まれているのでしょうか?

SQLSTATE[HY000] [1045] Access denied for user 'adffdadfxxxx'@'ip-xx-xx-147-183.ec2.internal' (using password: YES)

うまくいくかわかりませんが...

逆にurlに設定してみてもだめでしょうか?

ConnectionManager::config('default', [ 'url' => env('CLEARDB_DATABASE_URL'), ])

あとは、envではなく、php同様にgetenvを使ってみたらどうでしょうか?

php

1$db = parse_url(getenv("CLEARDB_DATABASE_URL"));

cakephpのコードを見てみましたが、
vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php
_connect関数が実際に接続に行く処理のようでした。
この関数のnew PDOに渡しているdsnやusernameやpasswordが正しいか以下のように直前でダンプして、みてみるのもありかと

php

1var_dump($dsn); 2var_dump($config['username']); 3var_dump($config['password']); 4var_dump($config['flags']);

投稿2016/09/24 22:15

編集2016/09/24 23:26
popobot

総合スコア6586

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

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

WADA1234

2016/09/25 22:26

前回に引き続きご教授ありがとうございます。 >ちなみにパスワードに記号は含まれているのでしょうか? パスワードは半角英数のみとなります。 >ConnectionManager::config('default', [ > 'url' => env('CLEARDB_DATABASE_URL'), >]); とすることにより、データベース接続が可能となりました。 ありがとうございます。 /app/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php こちらの $this->_connect($dsn, $config); で、congigの中には全然違うデータが入っておりました。 入っていなければならないものが入っておらず、これでは動かないですね。。 app.phpのソースコードがheroku上で書き換わっていないように感じております。 ローカルのconfig/app.phpを変更後、gitへコミットをかけようとすると下記のメッセージが出てきます。 $ git add . $ git commit -am "make it better" On branch master Your branch is up-to-date with 'heroku/master'. nothing to commit, working directory clean しかし、Templateのindex.ctpを変更後gitへコミットすると $git add . $ git commit -am "make it better" [master db72ec9] make it better 1 file changed, 1 insertion(+), 1 deletion(-) のように変更があった旨が記されます。 ローカル上ではconfig/app.phpの変更が出来ているのにgitへのコミットがうまく行っていないということでしょうか? 疑問は残りますが、やろうとしていたことが出来次へ進めます。 かなりの時間を使って調べていたので、とても助かりました。 ありがとうございました。
popobot

2016/09/25 23:10 編集

うまく行ってよかったです!(リベンジできて正直うれしいですw) あまりgit使っていないのですが、 通常、app.phpはコミットしません。app.default.phpを変更してコミットします。 デプロイ時には、app.default.phpをapp.phpコピーします。 composerで環境を作っているなら、composer installでコピーもやってくれますよ
guest

0

php

1'Datasources' => [ 2 'default' => [ 3 'className' => 'Cake\Database\Connection', 4 'driver' => 'Cake\Database\Driver\Mysql', 5 'persistent' => false, 6 'host' => 'us-cdbr-iron-east-04.cleardb.net', 7 'username' => 'bf223ea294f0af', 8 'password' => '*****', 9 'database' => 'heroku_0c82277f64c7d4b', 10 'encoding' => 'utf8', 11 'timezone' => 'UTC', 12 'cacheMetadata' => true, 13 'quoteIdentifiers' => false, 14 ],

このソースではいかがでしょうか?

投稿2016/09/24 15:28

tato.aoki

総合スコア33

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

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

WADA1234

2016/09/24 15:47

こちらも試しましたが、エラーとなってしまいます。 If you are using SQL keywords as table column names, you can enable identifier quoting for your database connection in config/app.php. カラムがいけない旨のメッセージだと思うのですが パスワードをxxxxなど適当なものを入力した場合と 正しいものを入れた場合で全く同じメッセージとなります。 そのためデータベース接続ができてないと思っています。
tato.aoki

2016/09/24 16:02

'timezone' => 'Asia/Tokyo',に変更してみても無理ですか? Access denied for user~~~~~~とのことなのでおっしゃる通りCakeがMySQLに接続できていない(認証でエラー)ということです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問