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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

MySQL

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

PHP

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

3回答

10850閲覧

パソコンを初期化したら、PHPでMySQLに接続できない。【1932エラー】

WeilSpinor

総合スコア170

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

MySQL

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

PHP

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

1グッド

1クリップ

投稿2019/05/21 13:47

編集2019/05/21 22:22

Windows10でXamppを使っています。パソコンを初期化したのですが、その影響か、PHPコードを実行したとき、MySQL(MariaDB)のデータベースに接続できないという不具合が発生しています。
Xamppのコントロールパネルでは、、MySQLは起動自体はしていて、phpMyAdminで今まで作ったデータベースを閲覧、操作することは可能です。
しかし、以前作ったDBを使ったPHPのプログラムを実行すると、DBから取り寄せる情報が表示されないという不具合が起きています。これは、PHPのデータベース接続用API(PDO)がMySQLに接続できていないということだと思います。

phpmyadminで作成したデータベースのテーブルにアクセスしようとしたところ、
1932エラー「Table 'テーブル名' doesn't exist in engine」を吐きました。
PCの初期化の時に、私の作ったテーブルが消えてしまったということでしょうか?
それとも残っていて、何らかのエラーでphpMyAdminで読み込めないだけでしょうか?
(データベース自体にはアクセスできてるので、存在するとは思うのですが…)

問題なのは、エラーメッセージが何も出ていないということです。

Googleで調べたのですが、1932エラーについての情報が少なすぎて、どうにもなりません。
(PCを初期化した結果こうなった、という状況についてはさらに情報が少ないです。)

どこの設定をチェックすればいいでしょうか?
ご回答宜しくお願いします。

###追記

正常に動かないPHPプログラムの画像を張ります。
プログラム
画像の矢印の部分のSelectのところに、MySQLのDBのテーブルに入っているデータが入るはずなんです。
このプログラムのソースコードは以下の通りです。

php

1<!DOCTYPE html> 2<html lang="ja" dir="ltr"> 3 <head> 4 <meta charset="utf-8"> 5 <title>プロジェクトマネージャー</title> 6 </head> 7 <body> 8 <?php 9 /*データベースから科目名と科目コードを取得しておく*/ 10 $dsn = "mysql:dbname=project_manager;host=localhost"; 11 $user = 'root'; 12 $password = '*******';//個人情報のため、秘匿 13 $dbh = new PDO($dsn,$user,$password); 14 $dbh -> query('SET NAMES utf8'); 15 16 $sql = 'SELECT code,subject_name FROM subject WHERE 1'; 17 $stmt = $dbh -> prepare($sql); 18 $stmt -> execute(); 19 20 while(true){ 21 $rec = $stmt->fetch(PDO::FETCH_ASSOC); 22 if($rec==false){ 23 break; 24 }; 25 $subject[] = $rec["subject_name"]; 26 $code[] = $rec["code"]; 27 }; 28 29 $dbh = null; 30 31 ?> 32 33 単元追加 <br><br> 34 <form action="tangen_main.php" method="post"> 35 科目: 36 <select name="subject"> 37 <?php 38 $max = count($subject); 39 for($i=0;$i<$max;$i++){ 40 print '<option value="'.$subject[$i].'">'.$subject[$i].'</option>'; 41 } 42 //submit時には、選択された科目コードがvalueに格納される 43 ?> 44 </select> 45 <br> 46 単元: 47 <input type="text" name="tangen" value="" style="width:300px"> 48 <br> 49 済or未<input type="checkbox" name="checkbox[]" value=""><!--checkboxはnameに[]が必要--> 50 <br> 51 <button type="submit">OK</button> 52 <br><br> 53 <a href="tangen_hyou.php">単元表へ</a> 54 </form> 55 56 </body> 57</html> 58

phpMyAdminの方のエラーについては、以下画像のようになります。イメージ説明

###追記その2
いまコマンドプロンプトで試してみたところ、データベースのテーブル一覧まではアクセスできたのですが、
SELECT文でテーブルの中に格納されたレコードを参照しようとすると、同じく1932エラーを吐きました。
つまり、phpとか関係なく、そもそも、

以前作ったテーブルが存在しないことになっている

ということです。
PC初期化の際にデータが消えてしまったのでしょうか?
データベース自体は残っているのに、なぜデータそのものだけなくなるんでしょう?

ご回答宜しくお願いSます。
###追記その3 パソコン初期化前後のバックアップと復元の流れ

ある日スタートアップ画面にてフリーズにより強制終了
→スタートアップ復元起動するも完走せずに通常起動し、真っ黒な画面に。
→回復ドライブを作成し再度スタートアップ復元をするも、完走せず
→システムの復元を実行するも、問題が発生して終了。その後、再起動ループに陥る
→セーフモードでシステムの復元を実行するも、同じく
→以前のバージョンに戻そうにも、問題が発生して終了
→PCの初期化を実行。やっと正常に動くように。

退会済みユーザー👍を押しています

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

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

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

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

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

m.ts10806

2019/05/21 13:53

これだけでは何も分からないです。 エラーがでているならエラーメッセージをそのまま添付すべきで、 何かしら画面が出ているなら画面キャプチャを添付すべきで。 そもそもPDOはAPIではなく拡張モジュールなのでそのあたり認識間違っているとあらぬ方向にしか向かいませんよ。
m.ts10806

2019/05/21 14:00

追記されましたけどこれだけでは回答に必要な情報が何も含まれていません。 せめてコードを提示するとか実行したときの画面キャプチャを提示するとか、状況を伝える努力をしてください。
m.ts10806

2019/05/21 14:03

エラーメッセージが出るような設定、コード(Exception拾うとか)でなければ出ないのは当然なので、コード見ないと何も言えないのが現状です。
m.ts10806

2019/05/21 14:16 編集

面白いですね。コードを出さずに画像だけでなんとかできると思ってらっしゃる。誰も回答するなってことですね。 なんでしょう「PHPプログラムの画像」って。プログラムはコード以上も以下もないですよ。 了解。自己解決頑張ってください。
papinianus

2019/05/21 22:10

パソコン初期化前後のバックアップと復元の流れを追記していただけませんか?
papinianus

2019/05/21 23:01

バックアップしてなかったということですね。Dataフォルダにibの文字を含むファイルは何がありますか? また、ログは訳ではなく原文を書いてください。 薄い参考として、データディクショナリはibdata1というファイルで、InnoDBはMySQLのストレージエンジンです。ストレージエンジンについて私はさほど理解していませんが、SQLを具体的に処理してデータ書き込みしたり、読み出したりしてくれるやつです。 https://dev.mysql.com/doc/refman/5.6/ja/innodb-introduction.html ストレージエンジンへの興味はDB復旧まで先送理することを推奨します
WeilSpinor

2019/05/22 06:31

ご回答ありがとうございます。 MySQLの仕組みがよくわかっていないのですが、どうやら具体的なテーブルの構造やそこに入ったレコードについては、ストレージエンジンというものが管理しているようですね。 色々調べたのですが、今回のエラーに関しては、あまりにもWeb上の情報が少なく(日本海外問わず)、わずかに存在する解決情報もストレージエンジンの仕組みをあまりわかっていない人の記録で、ほとんど参考にならないものばかりでしたので、もう復旧はあきらめて、MySQLを再インストールすることにしました。 直接的な原因としては、なぜか該当テーブルのibdファイルがなくなっていたことのようです。 この時点で復旧は諦めて、データベースのフォルダを手動で丸ごと削除し、同じ名前のデータベース、同じ名前・構造のテーブルを作り直そうとしたのですが、作ろうとすると、 「既に存在します」とか言い出しました。さっきは存在しないって言ってたくせに…。 つまり、「存在する」状態と「存在しない」状態が重ね合わさっている感じです。 この時点で、「MySQLがテーブルの存在を確認するとき、フォルダではなく、別の何かを参照している」と気づき、それがどうやらInnoDBのデータディクショナリとかいうものらしいのです。 一応、InnoDB関連のファイルを片っ端から(ibdata1も含む)覗いてみたところ、削除したはずのテーブル名が存在していました。これが原因なのかと思い、いっそと思ってInnoDB関連のファいるを全部削除して、もう一度CREATE TABLEをしてみたのですが、依然として「既に存在しています」…。 もうお手上げ、となって、もうMySQL毎入れ替えるしかなさそうです
m.ts10806

2019/05/22 06:32

着々と環境壊してますねぇ。
papinianus

2019/05/22 09:31

テーブルはfrmも持っているのでは?また、データベースが最適と思って構成するものがファイル単位と決めてかかるのは早計だと思います。 なくなったのか最初からなかったのかもホントのところは分かりませんが、いずれにせよデータベースのサービス中にOSが落ちた、かつバックアップをとっていない、というのは問題の性質としてノウハウが貯まったりノウハウを共有したりする領域ではないのだと思います。OSの落ち方とその時の壊れ方なんて制御できないですし、どうしようもなくて復旧しないといけなくなった事態なんて公開できるケースじゃないでしょうから
guest

回答3

0

コメントでも書いたんですけど、伝わってなかったようなので回答にしときますね。

エラー拾う設定を入れてください。
PHPのエラー表示をONの指定をしたうえで、
PDOExceptionを拾うようにしてください。

データが取得できているかどうかを「画面に想定の情報が出ているかどうか」で確認するのではなく、変数のデバッグによって確実に確認してください。

プログラムは組んだようにしか動かないので「想定通り動かない」ならデバッグで問題を切り分けるしかないです。
つまり、「どう動いているか」をポイントポイントで出力して地道に確認するしかないのです。
冒頭で書いたエラー表示やExceptionを拾うようにするコードもデバッグの一環です。

この記事にもデバッグの追い方、エラーメッセージが出た時の調べ方も書いてあります

投稿2019/05/21 14:26

m.ts10806

総合スコア80850

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

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

0

とりあえず、ここに書かれている対応策を参考にしてみては
シラサヤ備忘館 - [MySQL]1932 Table doesn't exist in engine エラーの解決方法
(状況的にも似ているので、幾分参考にはなるんじゃないですかね)

あ、過去質問からして、きちんと理解しないうちに行き当たりばったりでやってる感じがするので、参考記事内容をきちんと理解して、自己責任で実施してくださいね。
まあ、どうせPCを初期化したのなら、一から作り直す方がいいかもしれませんが(勉強にもなるし)。

投稿2019/05/21 15:23

archiver

総合スコア1557

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

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

WeilSpinor

2019/05/21 16:03

エラーログを見た結果、 「もしかして、テーブルのフォルダの中に、ibdファイルが無いんじゃない?」 と言われたので、フォルダを調べてみたところ、 確かに、ibdファイルがありませんでした。 別のデータベースのテーブルのフォルダをみたところ、 どうも、データベースのテーブルを作成すると、そのフォルダ内に、 テーブル名.frmとテーブル名.ibd という2つのファイルがセットで作成されているみたいです。 しかし、私が最近扱っていたデータベースだけ、frmファイルはあるが、ibdファイルだけ無くなっているようなんです。 僅かに存在する参考ブログでは、その2つのファイルをいったん削除してしまい、バックアップから復元させる、というやり方をとっているようでした。 しかし、私のmysqlのバックアップフォルダにはバックアップが作成されていなかったので、この方法は使えないと思われます。 あと、エラーログには「InnoDBのデータディクショナリには残ってる」と言っていました。 データディクショナリが何を意味するのか分からないのでスルーしましたが…。 そもそもInnoDBとはいったいなんなのか、engineとはなんなのか、mysqlとどういう関係にあるのか、よくわかりません。(調べてもレベルの高い技術者向け文章ばかり) もうお手上げでしょうか。 日本のサイトだけでなく海外のサイトを見ても情報が少なすぎます。 なぜこんなに情報が少ないんだろう…。
archiver

2019/05/22 13:33

類似質問をバカスカ出して色々と情報を集めたようですね。それらの質問で回答にも上がっていますが、データベースエンジンの不整合が起きている状況なので、一から構築したほうが早いです。 しかし、データのバックアップを取っていなかったというのは、言っちゃあなんですが、「愚の骨頂」ですね。PC初期化をすると決めたのなら、その時点で取るのは「当たり前」のことですよ。もしくは定期的に取っておくのが普通です。 ま、こうした失敗も知識の一つのなりますから、これも「お勉強」と思って、プラスの経験としてください。
WeilSpinor

2019/05/22 15:16

ええ、また一つ賢くなりました。
guest

0

大変ご苦労されたと思います。
まずデータの外部ストレージへのバックアップ方法について調べて置く必要があったのではないでしょうか。
もっともOSを含む全体のバックアップをするには特権などの知識も必要になります。
使っているPCがわからないので何とも言えないのですが外部HDを接続して必要なデーターだけ保存したら良いと思います。
Windows10のOS内部にあるファイルが関連しているとOSを含む全データーのバックアップが必要になります。

投稿2019/08/03 04:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問