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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

解決済

3回答

6222閲覧

PHPでデータベースのデータ件数を数える

ryohasegawa

総合スコア437

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グッド

0クリップ

投稿2017/05/30 14:44

php

1public function usercount(){ 2 $stmt = $this->db->query("select count(*) from users"); 3 $stmt->setFetchMode(\PDO::FETCH_CLASS, 'stdClass'); 4 $user = $stmt->fetch(); 5 return $user; 6 }

上のコードでSQLでデータベースからの値を取得します。

php

1<?php 2 $userModel = new \MyApp\Model\User(); 3 $userlist = $userModel->usercount(); 4 var_dump($userlist); 5?>

というPHPを書き取得した値を確認しました。

object(stdClass)#16 (1) { ["count(*)"]=> string(1) "6" }

うまく件数は取得できているみたいです。これで出力しようと、var_dump($userlist); のところを echo $userlist; にすると

Catchable fatal error: Object of class stdClass could not be converted to string in /Users/hasegawaryou/Dropbox/alpha/public/Admin/index.php on line 56

エラーが出ます。
この56行目というのは、echo $userlist; の行です。
翻訳してみると stdClassのオブジェクトを文字列に変換できませんでした という意味らしいのですが、どこが間違っているのですか?

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

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

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

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

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

guest

回答3

0

ベストアンサー

問題とする部分を再現できるよう、コードを書いてみました

php

1<?php 2 3function connectDB() 4{ 5 $serverName = '172.17.0.2'; 6 $userName = 'root'; 7 $password = 'root'; 8 $dbName = 'dev'; 9 10 $mysqli = new mysqli($serverName, $userName, $password, $dbName); 11 12 if($mysqli->connect_error) { 13 die('Connection failed: '.$mysqli->connect_error); 14 } 15 16 return $mysqli; 17} 18 19function numberOfUsers() 20{ 21 $mysqli = connectDB(); 22 23 $queryString = 'select count(*) from users'; 24 25 $queryResult = $mysqli->query($queryString)->fetch_object(); 26 // => object(stdClass)#3 (1) { ["count(*)"]=> string(1) "1" } 27 28 // クラスのプロパティにアクセスし、その値を結果として返却 29 return $queryResult->{"count(*)"}; 30} 31 32var_dump(numberOfUsers()); 33// => string(1) "1"

「標準クラス」なるものが登場していますが、通常通りクラスを書いて利用するのと同様、そのプロパティにアクセスすることで、値を取得できるようです

なので、usercount() メソッドの中で、$userlist ではなく、それが持つカウント値を返すと良いかもしれません

簡単に調べてみましたが、何か参考になれば幸いです

Link

投稿2017/05/30 21:35

gouf

総合スコア2321

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

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

ryohasegawa

2017/05/31 16:15

ありがとうございます。解決できました。
guest

0

$userlist は object なので、object から値を取り出して、出力して下さい。
または、usercount() で、値を抽出する際、object としてではなく、配列として抽出するのも良いかもしれないです。

投稿2017/05/30 21:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ryohasegawa

2017/05/31 16:16

ありがとうございます。
guest

0

まず文字列をベースに考えているなら

query("select count() from users");
keyの抜き出しは別名をつけるべきです
query("select count(
) as cnt from users");

その上でPDO::FETCH_CLASSで受けるのはやめて
普通に配列でうけてください

$row = $stmt->fetch();
return $row["cnt"];
すれば、件数が返ってきていることがわかります

投稿2017/05/31 00:25

yambejp

総合スコア114779

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

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

ryohasegawa

2017/05/31 16:16

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問