• ベストアンサー

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;

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

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

protected function dbConnect() { function setCategoryName($category) この時点でおかしい時が付くようになりましょ! どちらも関数なのですから、 開始位置は同じになるはず! つまり、 protected function dbConnect() の中に、setCategoryNameが出来てますよ。 (ちなみ1か所だけではありません。多数括弧の数が  あってませんので!) ただし、それらを「目で探す」のはやめましょう! コンピューターにおいて一番問題を起こすのは「人間です」。 こんなのは全部ツールに任せる癖をつけることで、 無駄な努力を捨てられますよ!。 classを使う前にPHPそのものを覚える方がよいのではないかと。 (これ、貴方の癖ですが、基礎を覚えずに  必ず、建物を作ろうとして毎回土台が壊れる。  また同じミスしてますよ~)

その他の回答 (9)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.10

Cannot redeclare と言うエラーは同じ名前の関数が既に定義されている時に発生するエラーです。 43行目に「public function getBlog($id)」があり、66行目にも「public function getBlog($id)」があり、同じ名前の関数を2度定義しているのでエラーになっています。

kouzou250
質問者

お礼

ご回答誠にありがとうございます。

  • watanabe04
  • ベストアンサー率18% (295/1598)
回答No.8

function delete($id) { の上の }が1個多いのか? いっぱい書いてごめんなさい。

kouzou250
質問者

お礼

見にくいコードをよく調べていただき誠にありがとうございます。 数を合わせたのですが、まだエラーが出ます。 問題は{ }の問題ですか???

  • watanabe04
  • ベストアンサー率18% (295/1598)
回答No.7

66行目の関数の終わりまでの{ }があってないのかな?

  • watanabe04
  • ベストアンサー率18% (295/1598)
回答No.6

上の関数の}が1個足りないように思えるけど。

  • watanabe04
  • ベストアンサー率18% (295/1598)
回答No.5

dbc.php on line 66 66行目がおかしいと言っている。 66行目はどこですか?

回答No.4

>するとまた意味不明なエラーメッセージが出ました。 >度々申し訳ございません。教えてください。 {と}の数をしらべてみて! 前にも言った件ですが。必ず {の次の行は、 1段右に書く癖をつけてください。 その中でまた{を使ったらさらに右! abc () { if (何か) { if (何か) { 一目見てどれがどの階層なのか、わかるように! } } } そんなこと?と思うかもしれませんが、 これが結構大事ですから。 ちなみ、PHPStormでは、 CTRL+ALT+Lで、一発で綺麗なソースに直してくれますよ。

kouzou250
質問者

お礼

ご回答誠にありがとうございます。 難しいです。でも、数は合わせました。 これであっているでしょうか? 右に書くというのができてないようです。      記 <?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 'その他'; } 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) { 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; エラーメッセージは変わりません。 アドバイスを頂けないでしょうか???

回答No.3

こちらのツールではこんな感じで、 誰でもわかるようにエラー出ますよ。 これPHPStormの兄弟IDEです。IDEAですが。 PHPも扱えるので、ちょっと試してみました。

回答No.2

Fatal error: Cannot redeclare Dbc::getBlog() in C:\xampp\htdocs\dbc.php on line 66 原因はこれです。 (って、貴方が書いてるが。。。 getBlogという関数がほかにもあってぶつかってるよ!が 原因ですが。 そろそろまともなIDE使いません? そういうの最初から教えてもらえますし、 聞かなくてもいい分、あなた自身が一番楽ですよ!。 PHPStormでも他のツールでもいいので、 まともな奴を! ただし、無料なのは、EAP(早期アクセスプログラムのみ) こういう場合、この部分と、衝突してる両方が出て、 エラーとしてすぐわかりますよ!。 人生1回しかないので、可能な限り無駄な時間を過ごさず。 ケツに火がついてるんだ!位の気持ちを持つと! 長い意味でいいよ~

kouzou250
質問者

お礼

ご回答誠にありがとうございます。 同じ関数があるということで、誤りであろうと感じる 関数を消去しました。 するとまた意味不明なエラーメッセージが出ました。 度々申し訳ございません。教えてください。 エラーメッセージは Parse error: syntax error, unexpected token "public", expecting end of file in C:\xampp\htdocs\dbc.php on line 42 です。        記 <?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 'その他'; } } } public function getAllBlog() { ★42行目です。 $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) { 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; P.S phpStormをインストールしましたが、使い方がよく解りませんでした。

回答No.1

書いてる途中で閉じないでくれ~~~

kouzou250
質問者

お礼

申し訳ございません。