PHP と MySQL が繋がらない!

この記事は約5分で読めます。
記事内に広告が含まれています

サーバ管理って難しい(1)

コーディングのイメージ

こんにちは、さちです!

最近レンタルサーバを触れる機会があったのですが、ローカル(自分のパソコン上)では起こらない様々なトラブルが起きました。

私の体験談が少しでも他の方の役に立てばと思い、定期的にサーバ管理体験談記事を書いていこうと思います。

スポンサーリンク

PHP で MySQL を扱う

PHP と MySQL を連携させることによって、PHP で MySQL上のデータを操作できるようになりとても便利です。

でも、自分一人でサーバの設定をすると結構苦労します。(体験談)

実際に私は PHP と MySQL を連携する際に、ちゃんと動作するようになるまで、丸2日徹夜して48時間という時間を費やしました……。

実際には分かってしまえば解決法は特に難しいわけではなく、なぜこんな簡単なことに48時間も費やしたのかと悲しくなります。

私の身に起きたことを説明すると……

MySQL からデータを取り出す PHPファイルを作成

ローカルで問題なく動作することを確認

その PHPファイル をサーバにアップロード

エラーが出て動かない……!

この問題が発生するかどうかはサーバによるみたいです。問題解決までの道のりを例題と共に見ていきましょう。

トラブルの詳細

例として、データベース内に次のようなテーブルと PHP を作ったと仮定しましょう。

テーブル

テーブル名: tb1
japanese english
レッド
黄色 イエロー
ブルー

このテーブルから次のような2種類の「SQL」を使ってデータを取り出してみます。

  • select * from tb1; … (1)
  • select * from TB1; … (2)

PHP

PHP を次のように記述します。

<?php
  $con = mysql_connect(サーバ名, ユーザ名, パスワード) ;
  mysql_select_db(データベース名);

  mysql_query("SET NAMES eucjpms;");
  $re = mysql_query("SQL",$con);

  echo("<table border=¥"1¥">");

  while($array = mysql_fetch_array($re)) {
    echo("<tr><td>".$array[0]."</td><td>".$array[1]."</td></tr>¥");
  }

  echo("</table>");
?>

プログラムの SQL の部分に、先ほどの(1),(2)のSQLを順に入れて実行してみます。

(1) 「select * from tb1;」の場合

結果は次のようになります。

レッド
黄色 イエロー
ブルー

ちゃんと実行され表示されました。

(2) 「select * from TB1;」の場合

結果は次のようになります。

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ……/test.php on line 10

エラーが出てしまいました……。

解決方法(デバッグ)

先程のエラーの表示だけでは何が原因なのか分かりにくく、問題を解決しづらいです。こういうときにはデバッグをします。

この「test.php」の10~12行目を次のように書き換えます。(プログラムを変更したくない場合はそのプログラムをコメントアウトしておきます)

// この部分を……
while($array = mysql_fetch_array($re)) {
  echo("<tr><td>".$array[0]."</td><td>".$array[1]."</td></tr>");
}

// このように書き換える
$array = mysql_fetch_array($re) or die("エラー内容:". mysql_error());

or die() を記述すると or の前の部分でエラーが起きた際に、die() の内容を実行します。

mysql_error() は MySQL で起きたエラー内容を教えてくれます。

実際に、このように書き換えた「test.php」で(2)の MySQL を実行すると、前述のエラーに加えて次のように表示されます。

Table 'データベース名.TB1' doesn't exist

「データベース名の中に TB1 という名前のテーブルはありません。」という内容のエラーが表示されます。

つまり、このエラーの文章から、テーブル名がおかしいということが分かります。この文章がないのとあるのでは大違いですよね。

(1)と(2)の違いは、テーブル名を大文字で書いたか小文字で書いたかの違いだけです。これだけの差でエラーがでます。

私の場合、phpMyAdmin を使い半角英数大文字でデータベースにテーブルを作成したのですが、あとでよく見たら勝手に小文字に変換して作成されていました。

小文字に変換したということは大文字も小文字も区別しないのかと思いきや、区別しているおかげでエラーが出てしまいます。

気をつけましょう!

エラーが出なくなったら書き換えた部分は元に戻しておきましょう。


<< 前へ | サーバ管理って難しい(1) | 次へ >>
サーバ管理って難しいTOPへ

コメント

タイトルとURLをコピーしました