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

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

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

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

Q&A

解決済

2回答

1325閲覧

php内でPDOを使いselectを実行してもfalseとなってしまいます。

pen_maru

総合スコア9

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

0グッド

0クリップ

投稿2018/08/11 07:40

編集2018/08/11 09:07

php内でPDOを使いselectを実行してもfalseとなってしまいます。

phpでデータベースからデータを取得し、表示させるというプログラムを作っているのですが、
データベースにデータが入っているにもかかわらずselectの結果がfalseとなります。
また、エラーメッセージにはテーブルが存在しないという内容になってしまいます。

クエリを実行した後に、
if ($stmt===false) {
print('失敗。<br>');
}
としたときに、失敗と表示されたので、$stmtの中身が空になっている?のかと思いました。

また、データベースが存在し、テーブルとその中身があることの確認は
コマンドプロンプトからmysqlに接続し
select number, name, body, date, pass from db_sample.post;
を実行した際にうまく表示されたので、SQL文が間違っているわけじゃないと思うのですが・・

何が原因でしょうか?

初心者のため、用語がまだしっかり理解できておらず
おかしな文章になっていたら申し訳ないです。

発生している問題・エラーメッセージ

string(104) "SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db_sample.post' doesn't exist"

該当のソースコード

php

1<?php 2 3// 接続設定 4$user = 'co-18-92.it.99sv'; 5$mypass = '***'; 6 7// データベースに接続 8 9try { 10 $dsn = 'mysql:host=localhost;dbname=db_sample;charset=utf8'; 11 $pdo = new PDO($dsn, $user, $mypass); 12 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 13 14 $sql = 'select number, name, body, date, pass from db_sample.post'; 15 $stmt = $pdo->query($sql); 16 17 if( ! $stmt ) { 18 die(var_export($pdo->errorinfo(), TRUE)); 19 } 20 21 22 while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ 23 24 print($result['number']); 25 print($result['name']); 26 print($result['body']); 27 print($result['date']); 28 print($result['pass'].'<br>'); 29 30 } 31 32 } catch (PDOException $e) { 33 34 var_dump($e->getMessage()); 35 exit; 36 37 } 38 39 40 41 42 43 ?>

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

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

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

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

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

papinianus

2018/08/15 00:26

確認なのですがコマンドプロンプトからはlocalhostに接続していますよね?他に似た環境があるわけではないのですよね?
pen_maru

2018/08/19 12:36

localhostに接続しています!また、確認してみたところmysqlとデータベースの接続がうまくできておらず、Access denied for user ..のエラーがでたので、まずその点を解決してみようと思います
guest

回答2

0

ベストアンサー

データベースにデータが入っているにもかかわらずselectの結果がfalseとなります。

また、エラーメッセージにはテーブルが存在しないという内容になってしまいます。

このあたりの情報は、省略せず、コピペしないと正しい説明ができません。

なので、推測ですが

テーブルが存在しないという内容

なので、テーブルが存在しないか、テーブル名称が間違っているかのいずれかです。

また、try-catch を利用するためには
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
が必要です。
で、$e を var_dump() でもしてやると良いです。

投稿2018/08/11 07:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

pen_maru

2018/08/11 08:15

ご回答有り難うございます! クエリを実行した後に、 if ($stmt===false) { print('失敗。<br>'); } としたときに、失敗と表示されたので、$stmtの中身が空になっている?のかと思いました。 また、データベースが存在し、テーブルとその中身があることの確認は コマンドプロンプトからmysqlに接続し select number, name, body, date, pass from db_sample.post; を実行した際にうまく表示されたので、SQL文が間違っているわけじゃないと 思ったのですが・・ try catchの使い方についてもアドバイスありがとうございます! $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); を追加し、 catch (PDOException $e) { var_dump($e->getMessage()); exit; } としたところ、 string(104) "SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db_sample.post' doesn't exist" というエラーメッセージが出たのでやはりテーブルが存在しないことになっているみたいです。
Orlofsky

2018/08/11 08:47 編集

ここのコメントに追記するのではなく、質問を修正しましょう。
pen_maru

2018/08/11 09:08

コメントありがとうございます、要領がわかっていないので助かります。 質問を修正しました。
guest

0

https://rimane-novels.net/php-pdo-762/
こちらのページに相当するミスをしていました。
非常に単純で申し訳ないです。

回答、アドバイスくださった皆さんありがとうございました!

投稿2018/09/26 08:00

pen_maru

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問