自分の環境:Windows xampp MySQL php7.x(ローカル)、Windows Heroku MySQL(本番環境)
レシピアプリをローカルで作ったのですが、ローカルと本番環境でどうコードを変えたらいいか分かりません。.envなどで一括して接続を管理するというのは教わったのですが、自分のコードに変更を加えなければいけない部分が分かりません。
例えば、↓update.php
update.php
1<?php 2//$user = "ローカルでのuser"; 3//$pass = "ローカルでのpass"; 4//require_once '\xampp\db_config.php'; 5$recipe_name = $_POST['recipe_name']; 6$howto = $_POST['howto']; 7$category = (int) $_POST['category']; 8$difficulty = (int) $_POST['difficulty']; 9$budget = (int) $_POST['budget']; 10try{ 11 if(empty($_POST['id'])) throw new Exception('ID不正'); 12 $id = (int) $_POST['id']; 13 //$dbh = new PDO('mysql:host=us-cdHerokuで得たホスト名、セキュリティの為変えてます4.cleardb.com;dbname=Herokuで得た~~heroku_c9b3セキュリティの為少し変えてます;', $user, $pass); 14 //$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 15 //$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 16 $sql = "UPDATE recipes SET recipe_name = ?, category = ?, difficulty = ?, budget = ?, howto = ? WHERE id = ?"; 17 $stmt = $dbh->prepare($sql); 18 $stmt->bindValue(1, $recipe_name, PDO::PARAM_STR); 19 $stmt->bindValue(2, $category, PDO::PARAM_INT); 20 $stmt->bindValue(3, $difficulty, PDO::PARAM_INT); 21 $stmt->bindValue(4, $budget, PDO::PARAM_INT); 22 $stmt->bindValue(5, $howto, PDO::PARAM_STR); 23 $stmt->bindValue(6, $id, PDO::PARAM_INT); 24 $stmt->execute(); 25 $dbh = null; 26 echo "ID: " . htmlspecialchars($id,ENT_QUOTES,'UTF-8') . "レシピの更新が完了しました。<br>"; 27 echo "<a href='index.php'>トップページへ戻る</a>"; 28} catch (Exception $e) { 29 echo "エラー発生: " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>"; 30 die(); 31} 32
こういうコードの場合どう変えればいいのかご教授願います。コメントアウトしている部分はデータベース接続に関わらない箇所・あるいは変えてしまうとレシピアプリの挙動を変えてしまうと判断した部分です。
やったこと:
・https://devcenter.heroku.com/articles/getting-started-with-php#provision-a-database
を確認したがLaravelの言葉?などで現在行っているPHPとは異なり全く参考にならなかった。
・似た質問でhttps://teratail.com/questions/227190をよく読んだが、
function dbConnect(){ $db = parse_url($_SERVER['CLEARDB_DATABASE_URL']); $db['dbname'] = ltrim($db['path'], '/'); $dsn = "mysql:host={$db['host']};dbname={$db['dbname']};charset=utf8"; $user = $db['user']; $password = $db['pass']; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true, ); $dbh = new PDO($dsn,$user,$password,$options); return $dbh; }
見ての通り質問も的を得ていないので解決は困難な気がするので、無料でHerokuにMySQLを使ってデプロイすることがアプリ作りを通して詳しく説明しているサイトなどがあれば教えてもらいたいです。 ・最後にまとめると、 データベース接続をローカルから本番に変更するためにはローカルでのコードを変更しなければならないが、そのためには例に挙げたupdate.phpをどう修正すべきか➀。データベースをハードコーディングするべきでないのなら、一か所にまとめて書く手法とともに、update.phpをどのように修正したらいいか➁。➀、➁が解答困難であるならば、アプリ作りを通じてMySQLを用いてHerokuを使ってデプロイまでしているサイトを紹介してほしい➂。
回答2件
あなたの回答
tips
プレビュー