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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

1回答

1746閲覧

fetch_allでエラー500がでてしまう。(クラスを呼び出してfetchしたい)

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

1クリップ

投稿2021/06/07 06:09

編集2021/06/08 03:01

前提・実現したいこと

(例)PHPでCMSを作っています。
データベースを作り、pdoで接続し、print_rですべての表を出力しようとしたのですが、
HTTP ERROR 500が発生してしまいます。一行ずつ消して確認していったところ、fetch_allの部分を消せばエラーがなくなったので、ここが原因かと思いますが、何が間違っているのかわかりません。
【追記】エラーログを出したら下記のように出ました。

Notice: Undefined variable: execute in /home/users/1/●●●●●-llc/web/cms_test/cms/includes/article.php on line 8←該当箇所に※つけました

Fatal error: Uncaught Error: Method name must be a string in /home/users/1/main.jp-●●●●●-llc/web/cms_test/cms/includes/article.php:8 Stack trace: #0 /home/users/1/main.jp-●●●●●-llc/web/cms_test/cms/index.php(7): Article->fetch_all() #1 {main} thrown in /home/users/1/main.jp-●●●●●-llc/web/cms_test/cms/includes/article.php on line 8

変数に値がはいっていない、存在しないメソッドを呼び出している、というようなことが書かれていますが、どうしたらよいでしょうか。

該当のソースコード

php

1 2__**index.php**__ 3 4<?php 5 6include_once('includes/connection.php'); 7include_once('includes/article.php'); 8 9$article = new Article; 10$articles = $article->fetch_all(); 11 12print_r($articles); 13 14?> 15 16<html> 17 <head> 18 <title>CMS</title> 19 <link rel="stylesheet" href="assets/style.css" /> 20 </head> 21 22 <body> 23 <div class="container"> 24 <a href="index.php" id="logo">CMS</a> 25 26 <ol> 27 <li> 28 <a href="article.php?id=1"> 29 Article Title 30 </a> 31 32 - <small>***</small> 33 </li> 34 </ol> 35 </div> 36 </body> 37 38</html> 39

php

1 2__**article.php**__ 3 4<?php 5 6class Article { 7 public function fetch_all() { 8 global $pdo; 9 10 $query = $pdo->prepare("SELECT * FROM articles"); 11 $query->$execute(); ※ 12 13 return $query->fetchAll(); 14 } 15} 16 17?> 18

php

1__**connection.php**__ 2 3<?php 4 5try { 6 $pdo = new PDO('mysql:host=mysqlXXXXXXXXX', 'XXXXXXX', 'XXXXXXX'); 7} catch (PDOException $e) { 8 exit('Database error.'); 9} 10 11?>

試したこと

■article.phpに記載した内容を、index.phpに移して実行してみたが、変わらず。
■問題の、fetch_allの部分を消して実行したらエラーは消えたが、配列が取得できないのでダメ。

補足情報(FW/ツールのバージョンなど)

ロリポップサーバーを使っています。

ご指摘いただいた箇所を修正いたしましたm(__)mよろしくお願いいたします。

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

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

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

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

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

m.ts10806

2021/06/07 06:18

あと、出ているエラーを確認してください。エラーログには出ているはずです。
m.ts10806

2021/06/07 06:19

コードも省略し過ぎでは全体がわかりません。なるべく他者がコピペで確認できるようにご配慮願います。 自分が思っている場所だけが問題の根本原因とは限りません。
FKM

2021/06/07 06:42

foreach($array = $guery -> fetch(PDO::FETCH_ASSOC)){ var_dump($array); } でどう出ますか?
退会済みユーザー

退会済みユーザー

2021/06/07 07:41

FKM様 回答ありがとうございます。 初歩的な質問で申し訳ございませんが、article.phpの、return $query->fetchAll();部分をそのように変更するという解釈でよろしいでしょうか?
m.ts10806

2021/06/07 07:44

画面に表示されている500だけだと詳細は分かりませんし、レンタルサーバだと画面上に出力しない設定になっている可能性があります。 500エラーは多岐に渡りますので「風邪です」と言われたようなものです。 詳細はエラーログに出力されているはずなのでサーバのエラーログを確認してください。(ロリポップ利用者ではないので場所はドキュメントやQA確認してください) あと、コードはマークダウンのcode機能にてご提示ください。
K_3578

2021/06/07 07:45

ソースコードはMarkDownのcode機能で囲んでください。 ```言語名 ソースコード ``` という形でファイル毎に分けます
FKM

2021/06/07 08:10

そうです。fetchAll()特有のエラーかどうかをチェックするためです。
退会済みユーザー

退会済みユーザー

2021/06/07 10:05

FKM様 ありがとうございます。 そのようにしたらエラーになりました。 foreachの部分を残して、fetchAll()の部分を消してもエラーになります。
退会済みユーザー

退会済みユーザー

2021/06/07 10:06

K_3578様 ありがとうございます。 初投稿なもので、不備があって申し訳ありません。 できるだけ直してみます。
退会済みユーザー

退会済みユーザー

2021/06/07 10:07

m.ts10806様 ありがとうございます。 やってみます。 エラーメッセージが出たらまた更新します。
FKM

2021/06/08 01:20

そもそもPDOオブジェクトはしっかりと生成されているのでしょうか?
退会済みユーザー

退会済みユーザー

2021/06/08 03:05 編集

FKM様 echo time();で、phpmyadminにタイムスタンプが表示されたのを確認したので、PDOはできていると思われます。 ちなみに、エラーログが出たので、編集して補足でその文言を加えました。閲覧いただきご教示いただけますと幸いです・・・!
FKM

2021/06/08 03:05

$query->execute(); ですよ、メソッドに変数は使えません
m.ts10806

2021/06/08 03:09

宣言ならともかく呼び出しなら使えますよ。 $execute='execute'; $query->$execute(); PHP以外だとあまり見ないかもしれませんが。
guest

回答1

0

ベストアンサー

executeはPDOオブジェクトに用意されたメソッドです。これだと未定義の変数です。

PHP

1 $query->$execute();
$query -> execute();

で実行しないといけません。

投稿2021/06/08 03:07

FKM

総合スコア3647

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

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

退会済みユーザー

退会済みユーザー

2021/06/08 03:10

初歩的でした、ありがとうございます!m(__)m それでエラーは消えましたが配列の中身がなぜか空なので、自分でやってダメでしたらまた質問させていただきますm(__)m
FKM

2021/06/08 03:11

配列の中身が空なのは、sql文のリクエストが何も返してないだけの可能性があります。これをphpmyadminとかmysqlで実行してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問