PHPのSyntax Errorを修正する方法とブログ一覧を表示する

このQ&Aのポイント
  • 27行目のfunction getAllBlog() { にParse error: syntax error, unexpected token 'function', expecting ';' in C:\xampp\htdocs\dbc.php on line 27と出ます。一体、どこが間違っているのでしょうか?ご回答のほど宜しくお願い申し上げます。
  • PHPのSyntax Errorの修正方法と、指定されたブログデータを取得して一覧表示する方法について説明してください。
  • PHPのコード中にSyntax Errorがあり、27行目のfunction getAllBlog() { が原因でParse error: syntax errorが発生しています。エラーの修正方法と、データベースからブログデータを取得して一覧表示するコードを示してください。
回答を見る
  • ベストアンサー

php どこが間違っているんでしょうか?

いつも大変お世話になり誠にありがとうございます。 標記の件。 27行目のfunction getAllBlog() { にParse error: syntax error, unexpected token "function", expecting ";" in C:\xampp\htdocs\dbc.php on line 27 と出ます。 一体、どこが間違っているのでしょうか? ご回答のほど宜しくお願い申し上げます。      記 <?php //関数1つに1つの機能のみ持たせる //データベース接続 //データを取得する //1.データベース接続 //引数:なし //返り値:接続結果を返す function dbConnect() { $dsn = 'mysql:host=localhost;dbname=blog;charset=utf8'; $user ='blog_user'; $pass ='**********'; try { $dbh = new PDO($dsn,$user,$pass,[ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗'; $e->getMessage(); exit(); }; return $dbh // 2.データを取得する //引数:なし //返り値:取得したデータ function getAllBlog() { $dbh = dbConnect(); //⓵SQLの準備 $sql = 'SELECT * FROM blog'; //⓶SQLの実行 $stmt = $dbh->query($sql); //⓷SQLの結果を受け取る $result = $stmt-> fetchall(PDO::FETCH_ASSOC); return $result; $dbh = null; } //取得したデータを表示 $blogData = getAllBlog(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ一覧</title> </head> <body> <h2>ブログ一覧</h2> <table> <tr> <th>No.</th> <th>お名前</th> <th>カテゴリー</th> </tr> <?php foreach($blogData as $column): ?> <tr> <td><?php echo $column['id']?></td> <td><?php echo $column['name']?></td> <td><?php echo $column['category']?></td> </tr> <?php endforeach; ?> </table> </body> </html>

  • PHP
  • 回答数4
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

デバッガで追いかけましょうよ。。 この程度のミスは、エディターが直してくれますって。。 function dbConnect() { ~~~ return $dbh ~~~ function getAllBlog() { この間に関数の終わりの"}"はあるか? って英語で書いてるのだから、それを直せばいいって 書いてると思いますよ。 つまり、PHPには function dbConnect() { return $dbh  function getAllBlog() { } } こうみえてるよ!ってエラーです。 あと、インデントもしっかりさせましょ! 今回の元々の問題は、PHPってより、 ソースをかけてない事の方が大きいです。 https://blog.senseshare.jp/indent.html これらを徹底することで、最初からこんな問題は起きなくなりますよ。

kouzou250
質問者

お礼

直りました。 ありがとうございます。

その他の回答 (3)

回答No.4

>phpStormをインストールしましたが、エディターを使わせてくれません。 無料版(厳密にはEAP版)にしましたか? >JetBrainsって凄く頭脳明晰な会社に感じます。 >お金、払わないといけないですか? 無料版は無料です。(当たり前ですが) ただ、無料のライセンスをもらうためのユーザー登録は必要ですが、 無視して使い始めても、普通に動きますよ。 画像添付できないので、説明できず、ごめんね~ とりあえず、1つの事だけみるんじゃなくて、 最初の"}"の件。これは原因。 次は、「そもそもその原因が作られる元凶を治すという何らかのエディタ」 最後に「同じ問題を起こさない為にどうするべきか?」という課題。 これらに取り組めば、先に進む速度は確実に早くなりますよ~。

kouzou250
質問者

お礼

デバックは、私、サイトを公開していましたが、今は持っていません。それなのに、URLを聞かれて、私は今の提示しているコードの誤りを知りたいだけなのです。 余計なことを聞いてくるのは何か関係あるのですか? サイトを公開していないので、デバックできません。 どうすればいいでしょうか???

  • Kaneyan-R
  • ベストアンサー率42% (1248/2907)
回答No.3

function dbConnect()が閉じられていないのでは? 「getAllBlogで出ているのだから関係ない」と思うかも知れないけど、getAllBlogでdbConnectを呼んでいるので、dbConnectもチェックするのが基本。

kouzou250
質問者

お礼

ご回答誠にありがとうございます。 エラーはまだ、どこか解りません。

回答No.2

ただし! そこ以外は、かなりまともなソースになりましたね! 思いっきり教科書式の書き方ですし。 <?php foreach($blogData as $column): ?> <?php endforeach; ?> 全然読めると思いますよ。 PHPStormとかの無料版でも何でもいいので、IDE使いましょうよ。 そもそも、手でチマチマ書く時代じゃないのでね。。 VSでもいいですが、VSは、私があまり好かないので^^(ここは好みで) ただ、ベタで、実行テストもしてないソースを サーバーにアップして動くかな~?って、結構あほらしいやり方なので、 開発環境は、マジで揃えた方が、あなた自身の為ですよ。

kouzou250
質問者

お礼

phpStormをインストールしましたが、エディターを使わせてくれません。JetBrainsって凄く頭脳明晰な会社に感じます。 どうしたら使わせてくれますか? お金、払わないといけないですか?

関連するQ&A

  • php html 混在 htmlに異常なエラー??

    いつも大変お世話になり誠にありがとうございます。 標記の件。 PhpStormにphpとhtmlを混在させると、htmlにエラー警告が イッパイ出ます。異常です。 添付の通り、正規にやっているのにhtmlにエラー警告が イッパイ出ます。 実際にはエラーじゃないのに、実行するとエラーになりました。 おかしいです。 これを回避するにはどうしたらよいでしょうか? 度々申し訳ございません。 教えてください。 宜しくお願い申し上げます。      記 <?php $dsn = 'mysql:host=localhost;dbname=blog_app;charset=utf8'; $user = 'blog_user'; $pass = 'rhythm0!KT'; try { $dbh = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); //echo '接続成功'; //①SQLの準備 $sql = "SELECT * FROM blog"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(PDO::FETCH_ASSOC); var_dump($result); $dbh = null; }catch(PDOException $e) { echo '接続失敗'.$e->getMessage(); exit(); } <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ一覧</title> </head> <body> <h2>ブログ一覧</h2> <table> <tr> <th>タイトル</th> <th>カテゴリー</th> <tr> <?php foreach ($result as $column):?> <tr> <td><?php echo $column['id'] ?></td> <td><?php echo $column['title'] ?></td> <td><?php echo $column['category'] ?></td> <?php endforeach; ?> </tr> </body>

  • 突如!接続エラー!?php

    いつもお世話になりありがとうございます。 標記の件。 下記のエラーがlocalhost/index.php/で出ました。 接続失敗SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for $host failed: ���̂悤�ȃz�X�g�͕s���ł��B 大変恐縮ではございますが、下記のコードを吟味して頂けないでしょうか? 度々申し訳ございません。 宜しくお願い申し上げます。      記 index.php <?php require_once ('blog.php'); $blog = new Blog(); $blogData = $blog->getAll(); function h($s){ return htmlspecialchars($s, ENT_QUOTES,"UTF-8"); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ一覧</title> </head> <body> <h2>ブログ一覧</h2> <p><a href="/form.html">新規作成</a></p> <table> <tr> <th>タイトル</th> <th>カテゴリー</th> <th>投稿日時</th> <tr> <?php foreach ($blogData as $column): ?> <tr> <td><?php echo h($column['title']) ?></td> <td><?php echo h($blog->setCategoryName($column['category'])) ?></td> <td><?php echo h($column['post_at']) ?></td> <td><a href="/detail.php?id=<?php echo $column['id'] ?>">詳細</a></td> <td><a href="/update_form.php?id=<?php echo $column['id'] ?>">編集</a></td> <td><a href="/blog_delete.php?id=<?php echo $column['id'] ?>">削除</a></td> </tr> <?php endforeach; ?> </body> </html> env.php <?php define('DB_HOST','localhost'); define('DB_NAME','blog_app'); define('DB_USER','blog_user'); define('DB_PASS','**********'); ?> dbc.php <?php require_once('env.php'); class Dbc { protected $table_name; protected function dbConnect() { $host = DB_HOST; $dbname = DB_NAME; $user = DB_USER; $pass = DB_PASS; $dsn = 'mysql:host=$host;dbname=$dbname;blog_app;charset=utf8'; try { $dbh = new \PDO($dsn, $user, $pass, [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; } public function getAll() { $dbh = $this->dbConnect(); //①SQLの準備 $sql = "SELECT * FROM $this->table_name"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(\PDO::FETCH_ASSOC); return $result; $dbh = null; } public function setCategoryName($category) { if ($category == '1') { return '日常'; } elseif ($category == '2') { return '非日常'; } else { return 'その他'; } } public function getById($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $sql = "SELECT * FROM $this->table_name"; $stmt = $dbh->prepare("SELECT * FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(\PDO::FETCH_ASSOC); if (!$result) { exit('本文がありません。'); } return $result; } public function delete($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $stmt = $dbh->prepare("DELETE FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); echo 'ブログを削除しました!'; return $result; } } ?> <p><a href="/">戻る</a></p> 大変、お手数をおかけします。 どうか教えてください。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • $blogData変数が変???

    いつも大変お世話になり誠にありがとうございます。 標記の件。 ファイルが多すぎて、分からなくなってしまいました。 他の箇所に問題があるのではないかと思っております。 5行目にエラーが出ております。 エラーメッセージは Fatal error: Uncaught Error: Call to undefined method Blog::getAll() in C:\xampp\htdocs\index.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\index.php on line 5 です。 分かりづらいと思いますが、 アドバイスを宜しくお願い申し上げます。 本当に度々申し訳ございません。         記 <?php require_once('blog.php'); $blog = new Blog(); $blogData = $blog->getAll(); function h($s) { return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ一覧</title> </head> <body> <h2>ブログ一覧</h2> <p><a href = "/form.html">新規作成</a></p> <table> <tr> <th>タイトル</th> <th>カテゴリー</th> <th>投稿日時</th> </tr> <?php foreach($blogData as $column): ?> <tr> <td><?php echo h($column['title'])?></td> <td><?php echo h($blog->setCategoryName($column['category']))?></td> <td><?php echo h($column['post_at'])?></td> <td><a href = "/detail.php?id=<?php echo $column['id'] ?>">詳細</a></td> <td><a href = "/update_form.php?id=<?php echo $column['id'] ?>">編集</a></td> <td><a href = "/blog_delete.php?id=<?php echo $column['id'] ?>">削除</a></td> </tr> <?php endforeach; ?> </table> </body> </html>

    • ベストアンサー
    • PHP
  • PHPとMySQL 検索フォームを作りたい。

    PHPとMySQLを使って商品一覧を作りました。 ◆商品一覧表 http://pips.chu.jp/0/07/index.php <?php function connect() { return new PDO("mysql:dbname=★.★","★","★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM shohin"); $shohin = $st->fetchAll(); ?>    <TABLE border="1"> <tr> <th>商品番号</th> <th>商品名</th> <th>分類</th> <th>販売単価</th> <th>仕入単価</th> <th>登録日</th> </tr> <?php foreach ($shohin as $g) { ?> <tr> <td><?php echo $g['id'] ?></td> <td><?php echo $g['name'] ?></td> <td><?php echo $g['bunrui'] ?></td> <td class="td-price"><?php echo number_format ($g['htanka']) ?></td> <td class="td-price"><?php echo number_format ($g['stanka'])?></td> <td><?php echo $g['day'] ?></td> </tr> <?php } ?> </TABLE> ◆特定の商品一覧表 http://pips.chu.jp/0/07/irui.php ↓ $st = $pdo->query("SELECT * FROM shohin");の部分を $st = $pdo->query("SELECT * FROM shohin WHERE bunrui='衣類' ");に変更すると 分類が衣類だけの表になります。 ◆入力フォーム http://pips.chu.jp/0/07/form.php ↓ <form action = "kensaku.php" method="post">    分類:<input type="text" name="bunrui">    <input type="submit" name="submit" value="検索"> </form> こんな感じの入力フォームを作り、分類名を入力すると、その分類名の一覧表に反映されるようにしたいです。 ◆検索された一覧表 http://pips.chu.jp/0/07/kensaku.php ↓ <?php function connect() { return new PDO("mysql:dbname=★.★","★","★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM shohin WHERE bunrui='?' "); $shohin = $st->fetchAll(); ?>    <TABLE border="1"> <tr> <th>商品番号</th> <th>商品名</th> <th>分類</th> <th>販売単価</th> <th>仕入単価</th> <th>登録日</th> </tr> <?php foreach ($shohin as $g) { ?> <tr> <td><?php echo $g['id'] ?></td> <td><?php echo $g['name'] ?></td> <td><?php echo $g['bunrui'] ?></td> <td class="td-price"><?php echo number_format ($g['htanka']) ?></td> <td class="td-price"><?php echo number_format ($g['stanka'])?></td> <td><?php echo $g['day'] ?></td> </tr> <?php } ?> </TABLE> 「入力フォーム」と「検索された一覧表」のソースの書き方がわかりません。 どのようにけば実現するでしょうか。 まだ初心者なので、本やサイトを調べながら見よう見まねでやっています。 具体的に、どの部分を書き換えればよいか教えていただければ有難いです。 よろしくお願いします。

  • php 66行目の関数に矛盾???

    いつも大変お世話になり誠にありがとうございます。 標記の件。 たくさんファイルがあるので、他の箇所に 問題があるのかもしれません。 エラーメッセージは Fatal error: Cannot redeclare Dbc::getBlog() in C:\xampp\htdocs\dbc.php on line 66 です。 度々申し訳ございません。 アドバイスを宜しくお願い申し上げます。      記 <?php require_once('env.php'); Class Dbc { protected $table_name; //1.データベース接続 //引数:なし //返り値:接続結果を返す protected function dbConnect() { $host = DB_HOST; $dbname = DB_NAME; $user = DB_USER; $pass = DB_PASS; $dsn = "mysql:host = $host;dbname = $dbname;charset=utf8"; try { $dbh = new \PDO($dsn,$user,$pass,[ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗'; $e->getMessage(); exit(); }; return $dbh; } //カテゴリー名を表示 //引数:数字 //返り値:カテゴリーの文字列 function setCategoryName($category) { if ($category == '1') { return '日常'; }elseif ($category == '2') { return '非日常'; }else{ return 'その他'; } } //引数:id //返り値:$result public function getBlog($id) { if(empty($id)) { exit('idが不正です。'); } } public function getAllBlog() { $dbh = $this->dbConnect(); //⓵SQLの準備 $stmt = $dbh->prepare('SELECT * FROM blog Where id = :id'); $stmt->bindValue(':id',(int)$id, \PDO::PARAM_INT); //⓶SQLの実行 $stmt->execute(); //⓷SQLの結果を受け取る $result = $stmt-> fetchall(\PDO::FETCH_ASSOC); if(!$result) { exit('本文がありません。'); } return $result; $dbh = null; } //引数:$id //返り値:$result public function getBlog($id) { ★ここが66行目です。 if(empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); //SQL準備 $stmt = $dbh->prepare('SELECT * FROM blog Where id = :id'); $stmt->bindValue(':id',(int)$id, \PDO::PARAM_INT); //SQL実行 $stmt->execute(); //結果を取得 $result = $stmt->fetch(\PDO::FETCH_ASSOC); if(!$result) { exit('本文がありません。'); } } //return $result; } function delete($id) { exit('idが不正です。'); } return $result;

    • ベストアンサー
    • PHP
  • $dbh = dbConnect();

    いつもお世話になりありがとうございます。 標記の件。 エラーになります。 どう直せばいいでしょうか? エラーメッセージは Fatal error: Uncaught Error: Call to undefined function dbConnect() in C:\xampp\htdocs\blog_create.php:9 Stack trace: #0 {main} thrown in C:\xampp\htdocs\blog_create.php on line 9 です。 コーディングは下記です。 <?php //require_once('form.html'); require_once('blog.php'); $sql = "INSERT INTO table_name(name,title,category,content) VALUES (:name, :title, :category, :content,)"; $dbh = dbConnect(); $dbh->beginTransaction(); try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':id', $blogs['id'], PDO::PARAM_INT); $stmt->bindValue(':name', $blogs['name'], PDO::PARAM_STR); $stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR); $stmt->bindValue(':post_at', $blogs['post_at'], PDO::PARAM_INT); $stmt->execute(); $stmt->commit(); echo 'ブログを投稿しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } blog.php <?php //require_once('dbc.php'); //<?php //class Dbc //{ // protected $table_name; //protected function dbConnect() //{ $dsn = 'mysql:host=localhost;dbname=blog_app;charset=utf8'; $user = 'blog_user'; $pass = 'rhythm0!KT'; try { $dbh = new \PDO($dsn, $user, $pass, [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; //} function getAll() { $dbh = $this->dbConnect(); //①SQLの準備 $sql = "SELECT * FROM $this->table_name"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(\PDO::FETCH_ASSOC); return $result; $dbh = null; } $dbh = $this->dbConnect(); $sql = "SELECT * FROM $this->table_name"; $stmt = $dbh->prepare("SELECT * FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(\PDO::FETCH_ASSOC); if (!$result) { exit('本文がありません。'); } return $result; //} //function blogCreate($blogs) { $sql = 'INSERT INTO blog(title, content, category, publish_status) VALUES (:title, :content, :category, :publish_status)'; $dbh = $this->dbConnect(); $dbh->biginTransaction; try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':title', $blogs['title'], \PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], \PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], \PDO::PARAM_INT); $stmt->bindValue(':publish_status', $blogs['publish_status'], \PDO::PARAM_INT); $stmt->execute(); $dbh->commit(); echo 'ブログを投稿しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } } function delete($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $stmt = $dbh->prepare("DELETE FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); echo 'ブログを削除しました!'; return $result; } //} ?> 度々申し訳ございません。 教えてください。 ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • this->何故?エラー???

    いつもお世話になりありがとうございます。 標記の件。 26行目がどうしてもエラーになります。 エラーメッセージは Fatal error: Uncaught Error: Undefined constant "this" in C:\xampp\htdocs\dbc.php:26 Stack trace: #0 C:\xampp\htdocs\index.php(4): Dbc->getAll() #1 {main} thrown in C:\xampp\htdocs\dbc.php on line 26 です。 度々申し訳ございません。 アドバイスの程、宜しくお願い申し上げます。      記 <?php class Dbc { protected $table_name; private function dbConnect() { $dsn = 'mysql:host=localhost;dbname=blog_app;charset=utf8'; $user = 'blog_user'; $pass = 'rhythm0!KT'; try { $dbh = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; } public function getAll() { $dbh = this->dbConnect();  ★ここが26行目 //①SQLの準備 $sql = "SELECT * FROM this->$table_name"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(PDO::FETCH_ASSOC); return $result; $dbh = null; } public function setCategoryName($category) { if ($category == '1') { return '日常'; } elseif ($category == '2') { return '非日常'; } else { return 'その他'; } } public function getById($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = this->dbConnect(); $stmt = $dbh->prepare("SELECT * FROM this->$table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); if (!$result) { exit('本文がありません。'); } return $result; } public function blogCreate($blogs) { $sql = 'INSERT INTO blog(title, content, category, publish_status) VALUES (:title, :content, :category, :publish_status)'; $dbh = this->dbConnect(); $dbh->biginTransaction; try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], PDO::PARAM_INT); $stmt->bindValue(':publish_status', $blogs['publish_status'], PDO::PARAM_INT); $stmt->execute(); $dbh->commit(); echo 'ブログを投稿しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } } } ?>

    • ベストアンサー
    • PHP
  • SELECT文でエラー???何故でしょうか???

    いつも大変お世話になり誠にありがとうございます。 標記の件。 ファイルが多いので、他の箇所に誤りがあるかもしれません。 エラーメッセージは Fatal error: Uncaught Error: Object of class Blog could not be converted to string in C:\xampp\htdocs\dbc.php:55 Stack trace: #0 C:\xampp\htdocs\detail.php(4): Dbc->getById('1') #1 {main} thrown in C:\xampp\htdocs\dbc.php on line 55 です。 度々申し訳ございません。 アドバイスの程、宜しくお願い申し上げます。      記 <?php class Dbc { protected $table_name; protected function dbConnect() { $dsn = 'mysql:host=localhost;dbname=blog_app;charset=utf8'; $user = 'blog_user'; $pass = 'rhythm0!KT'; try { $dbh = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; } public function getAll() { $dbh = $this->dbConnect(); //①SQLの準備 $sql = "SELECT * FROM $this->table_name"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(PDO::FETCH_ASSOC); return $result; $dbh = null; } public function setCategoryName($category) { if ($category == '1') { return '日常'; } elseif ($category == '2') { return '非日常'; } else { return 'その他'; } } public function getById($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $stmt = $dbh->prepare("SELECT * FROM $this->$table_name Where id = :id"); ★ここが55行目です! $stmt->bindValue(':id', (int)$id, PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); if (!$result) { exit('本文がありません。'); } return $result; } public function blogCreate($blogs) { $sql = 'INSERT INTO blog(title, content, category, publish_status) VALUES (:title, :content, :category, :publish_status)'; $dbh = $this->dbConnect(); $dbh->biginTransaction; try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], PDO::PARAM_INT); $stmt->bindValue(':publish_status', $blogs['publish_status'], PDO::PARAM_INT); $stmt->execute(); $dbh->commit(); echo 'ブログを投稿しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } } } ?>

    • ベストアンサー
    • PHP
  • ブログサイト。2つのソースコードをご覧ください。

    いつも大変お世話になり誠にありがとうございます。 標記の件。 YouTubeを参考にブログサイトに挑戦しております。 YouTubeの説明がレベルが高く、またファイルの遷移が早いので、 私自身、訳解らなくなっています。 必死に転記しました。 しかし、どうしてもエラーが出ます。 もうギブアップしようかなと思いましたが、ぶしつけな質問ですが、皆様に教えを乞うと思いました。 参考サイトを勉強しましたがあまり役に立たないと思いました。 2つのファイルのソースコードを提示します。 また添付はそこから詳細をクリックすると次のように エラーになります。 Fatal error: Uncaught Error: Object of class Blog could not be converted to string in C:\xampp\htdocs\dbc.php:55 Stack trace: #0 C:\xampp\htdocs\detail.php(4): Dbc->getById('1') #1 {main} thrown in C:\xampp\htdocs\dbc.php on line 55      記 dbc.php <?php class Dbc { protected $table_name; protected function dbConnect() { $dsn = 'mysql:host=localhost;dbname=blog_app;charset=utf8'; $user = 'blog_user'; $pass = '**********'; try { $dbh = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; } public function getAll() { $dbh = $this->dbConnect(); //①SQLの準備 $sql = "SELECT * FROM $this->table_name"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(PDO::FETCH_ASSOC); return $result; $dbh = null; } public function setCategoryName($category) { if ($category == '1') { return '日常'; } elseif ($category == '2') { return '非日常'; } else { return 'その他'; } } public function getById($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $stmt = $dbh->prepare("SELECT * FROM $this->$table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); if (!$result) { exit('本文がありません。'); } return $result; } public function blogCreate($blogs) { $sql = 'INSERT INTO blog(title, content, category, publish_status) VALUES (:title, :content, :category, :publish_status)'; $dbh = $this->dbConnect(); $dbh->biginTransaction; try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], PDO::PARAM_INT); $stmt->bindValue(':publish_status', $blogs['publish_status'], PDO::PARAM_INT); $stmt->execute(); $dbh->commit(); echo 'ブログを投稿しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } } } ?> detail.php <?php require_once('blog.php'); $blog = new Blog(); $result = $blog->getById($_GET['id']); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ詳細</title> </head> <body> <h2>ブログ詳細</h2> <h3>タイトル:<?php echo $result['title'] ?> </h3> <p>投稿日時:<?php echo $result['post_at'] ?></p> <p>カテゴリー:<?php echo $blog->setCategoryName($result['category']) ?></p> <hr> <p>本文:<?php echo $result['content'] ?></p> </body> </html> 誠に恐れ入ります。 アドバイスの程、宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • SELECT文。何故?エラー???

    いつも大変お世話になり誠にありがとうございます。 標記の件。 どうしても、何故?エラーなのか解りません。 エラーメッセージは Warning: Undefined variable $dbc in C:\xampp\htdocs\detail.php on line 21 Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\detail.php:21 Stack trace: #0 {main} thrown in C:\xampp\htdocs\detail.php on line 21 です。 何度も申し訳ございません。 下記にコードを記載します。 どうか教えてください。 アドバイスをお願い申し上げます。       記 <?php $id = $_GET['id']; function dbConnect(){ $dsn = 'mysql:host=localhost;dbname=blog_app;charset=utf8'; $user = 'blog_user'; $pass = 'rhythm0!KT'; try { $dbh = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; } $dbh = dbConnect(); $stmt = $dbc->prepare('SELECT * FROM blog Where id = :id'); ★21行目 $stmt->bindValue(':id', (int)$id, PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ詳細</title> </head> <body> <h2>ブログ詳細</h2> <h3>タイトル:<?php echo $result['title']?> </h3> <p>投稿日時:<?php echo $result['post_at']?></p> <p>カテゴリー:<?php echo $result['category']?></p> <hr> <p>本文:<?php echo $result['content']?></p> </body> </html>

    • ベストアンサー
    • MySQL

専門家に質問してみよう