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

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に必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

6回答

10805閲覧

同じSQLで結果が違うエラーに遭遇

earnest_gay

総合スコア615

MySQL

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

SQL

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

0グッド

1クリップ

投稿2016/12/21 09:20

編集2016/12/21 09:52

見ての通り0件です。
イメージ説明

phpで実行すると、、、
イメージ説明

、、、、
イメージ説明

なぜ結果が違うのでしょうか???

全レコードは9件なので空白のレコードなんて存在しないのは断言できます。

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

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

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

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

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

guest

回答6

0

SELECT COUNT(*) as count したのですから、

pre

1+-----+ 2|count| 3+-----+ 4| 0| 5+-----+

という形の1レコードが結果として返ってきているのでは。

投稿2016/12/21 09:24

編集2016/12/21 09:25
tacsheaven

総合スコア13703

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

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

earnest_gay

2016/12/21 09:47

回答ありがとうございます。 その仮定でいくとクライアントツールでも 「1件のレコードがある」として「1」が表示されると思うのですが、、、
tacsheaven

2016/12/21 09:54 編集

クライアントツールは上のレコードそのものを表示しているから合っているんですよ。 ※だからカラム名「count」の値が「0」です SELECT count(*) as count ~ は、「条件に合うレコード数をカウントし、それを count という列の値とする結果集合を返せ」 なのですから、 ・結果集合としては1レコード ・そのレコードの中身の count に、カウントした結果 が入っているのです。
guest

0

自己解決

---結果的に画像がバラバラになっていて質問内容が成立していませんでしたが、その後の処理でUPDATEがかかっていたため期待値と異なっていました。

同じSQLで結果が違うエラーに遭遇することはないということでした。

投稿2016/12/28 04:52

編集2016/12/28 04:53
earnest_gay

総合スコア615

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

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

0

基本的には他の方と同じ意見で、「0という値が1件」というだけのことだと思いますが、

色々検証していて画像が違うものになってしまっていますが、ターミナルの画像は
var_dump($record_count['count']);の結果です。

もしこれが本当なら、

  • アクセスしているDB・スキーマが違う
  • どちらかがコミット前の状態でアクセスしている

のどちらかの可能性が高いと思います。そうでなかったとしても、とにかく提示されているコードとは関係のない部分で差異が発生しているはずだと思います。そういう観点で全体を見直してみてください。

投稿2016/12/21 16:05

miu_ras

総合スコア902

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

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

0

今回のケースでは、
開示可能であればテーブル内のサンプルデータも掲示していただけると回答しやすい内容となると思います。

Kosuke_Shibuyaさんの回答へのコメントの内容も踏まえて、
あれこれ検証している内の単純ミスなのかそれ以外なのか切り分けたいので、PDOStatementクラスのfetchメソッドから、同クラスのfetchColumnメソッドの利用へと一時置き換えてみて下さい。
(元の記載は一先ずコメントアウトにするぐらいで良いです)

PHP

1$stmt = $this->pdo->query($sql); 2$record_count = $stmt->fetchColomn(); 3 4var_dump($sql); 5var_dump($record_count);

上記コードの出力結果が、
正しくレコード件数が正しく帰ってきているようなら、
tacsheavenさんやKosuke_Shibuyaさんの指摘の通りかと思われます。

投稿2016/12/21 14:48

Panzer_vor

総合スコア1636

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

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

0

各々で取得しているデータは、以下の通り同じです。

クライアントツール:レコード数1 値0
PHP :レコード数1 値0

クライアントツールはレコード数と値を「表形式」で表示しています。
一方で、PHP側はレコード数しか表示していません。

投稿2016/12/21 11:43

reikaknowledge

総合スコア8

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

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

0

var_dump() の引数に結果セットを設定していないからです。

var_dump($record_count['count']);

投稿2016/12/21 09:24

編集2016/12/21 09:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

earnest_gay

2016/12/21 09:45

すいません。 色々検証していて画像が違うものになってしまっていますが、ターミナルの画像は var_dump($record_count['count']);の結果です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問