functionのclass化
PHP(CakePHP)でブログのwebアプリシステムを作っています。
functionをまとめてclass化する機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Uncaught Error: Call to undefined method PDO::comit() in C:\xampp\htdocs\blog_app\dbc.php:96 Stack trace:#0 C:\xampp\htdocs\blog_app\blog_create.php(23): Dbc->blogCreate(Array)#1 {main}thrown in C:\xampp\htdocs\blog_app\dbc.php on line 96
:
該当のソースコード
php
1<?php 2class Dbc 3{ 4 //1.データベース接続 5 //引数:なし 6 //返り値:接続結果を返す 7 function dbConnect(){ 8 $dsn = 'mysql:host=localhost;dbname=blog_app;charaset=utf8'; 9 $user = 'blog_user'; 10 $pass = 'shibata0'; 11 12 try {//通常処理 13 $dbh = new \PDO($dsn,$user,$pass,[//オプションの設定でSQL実行でエラーが起こった際に投げかける設定 14 \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, 15 ]); 16 }catch(PDOException $e){//例外(エラー)が発生した場合に処理 17 echo '接続失敗'.$e->getMessage(); 18 exit(); 19 }; 20 return $dbh; 21 } 22 23 //2.データを取得する 24 //引数:なし 25 //返り値:取得したデータ 26 function getAllBlog(){ 27 $dbh = $this->dbConnect(); 28 //➀SQLの準備 29 $sql = 'SELECT * FROM blog'; 30 //➁SQLの実行 31 $stmt = $dbh->query($sql);//queryに渡すことでsqlで実行したい内容をphpで行えるようになる 32 //➂SQLの結果を受け取る 33 $result = $stmt->fetchall(\PDO::FETCH_ASSOC); //引数のPDO::FETCH_ASSOCは、列名を記述し配列で取り出す設定をしている。配列の最後まで下記を実行し続ける 34 //var_dump($result);//データが受け取れているかの表示 35 return $result; 36 $dbh = null; 37 }//function getAllBlog 38 39 //取得したデータの表示 40 //$blogData = getAllBlog(); 41 42 43 //3.カテゴリー名を表示 44 //引数:数字 45 //返り値:カテゴリーの文字列 46 function setCategoryName($category){ 47 if($category === '1'){ 48 return '日常'; 49 }elseif($category === '2'){ 50 return 'プログラミング'; 51 }else{ 52 return 'その他'; 53 } 54 } 55 56 //引数:$id 57 //返り値:$result 58 function getBlog($id){ 59 if(empty($id)){ 60 exit('IDが不正です。'); 61 } 62 63 $dbh = $this->dbConnect(); 64 65 //SQL準備 66 $stmt = $dbh->prepare('SELECT * FROM blog where id = :id'); 67 //:idをプレースホルダーとすることで、sqlインゼクションを防ぐ 68 $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); 69 70 //SQL実行 71 $stmt->execute(); 72 73 //結果を取得 74 $result = $stmt->fetch(\PDO::FETCH_ASSOC); 75 //var_dump($result); 76 if(!$result){ 77 exit('ブログが見つかりません'); 78 } 79 return $result; 80 } 81 82 function blogCreate($blogs){ 83 $sql = 'INSERT INTO 84 blog(title, content, category, publish_status) 85 VALUES 86 (:title, :content, :category, :publish_status)'; 87 $dbh = $this->dbConnect(); 88 $dbh->beginTransaction(); 89 try { 90 $stmt = $dbh->prepare($sql); 91 $stmt->bindValue(':title', $blogs['title'], \PDO::PARAM_STR); 92 $stmt->bindValue(':content', $blogs['content'], \PDO::PARAM_STR); 93 $stmt->bindValue(':category', $blogs['category'], \PDO::PARAM_INT); 94 $stmt->bindValue(':publish_status', $blogs['publish_status'], \PDO::PARAM_INT); 95 $stmt->execute(); 96 $dbh->comit(); 97 echo 'ブログを投稿しました'; 98 }catch(PDOException $e){ 99 $dbh->rollBack(); 100 exit($e); 101 } 102 } 103 104}//class 105?>
試したこと
class化をするまえの状態にすると、特にエラーが出てくるということは起きません。
補足情報(FW/ツールのバージョンなど)
こちらの動画を参考に作りました。手順などはすべて合っているはずです。
https://www.youtube.com/watch?v=nmV0JwVo3L8&list=PLCyDm9NTxdhIwBK3hsY_2GNg8BPgLMV1M&index=9
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/27 03:57
2020/08/27 04:07