プロが教える店舗&オフィスのセキュリティ対策術

外部クラスファイルを読みこんで実行させたいのですが、次のエラーになってしまいます。
------------------------エラー文--------------------------------
Fatal error: Cannot instantiate non-existent class: mysql
(訳)
Fatal error~致命的な
instantiate~定数に実数を割り当てる
existent~存在する、現在の
----------------------------------------------------------------
エラーが出てる行数のコードは
$mysql = new MySQL;
の文です。
下記がソースです。
一応require_once("mysql.php")の呼び出しは成功しています。
mysql.php自体をブラウザで直接呼出したところ、エラーはでません。
有識者の方いらっしゃいましたらご教示宜しくお願いします。
---------------------ソースコード-------------------------------
<?php
session_start();
//----------------------------------------
// ■ MySQLクラスファイルの取り込み
//----------------------------------------
require_once("mysql.php");
//----------------------------------------
// ■ 変数初期化
//----------------------------------------
$sql = "";
$sql2 = "";
$sql3 = "";
$error = "";

//----------------------------------------
// ■ 変数定義
//----------------------------------------
$login_id = $_SESSION["login_id"];
$mail_address = $_SESSION["mail_address"];
$name = $_SESSION["girl_name"];
$age = $_SESSION["age"];
$gyousyu = $_SESSION["gyousyu"];
$tiiki3 = $_SESSION["tiiki3"];
$keikenn = $_SESSION["keikenn"];
$pic = "";
$koukai = $_SESSION["koukai"];
$nissuu = $_SESSION["nissuu"];
$job = $_SESSION["job"];
$address = $_SESSION["address"];
$freeword = $_SESSION["freeword"];
//----------------------------------------
// □:MYSQLクラスインスタンスの作成
//----------------------------------------
$mysql = new MySQL;



---------------------------------------------------------------

A 回答 (2件)

No.1です。



載せていただいたmysql.phpとあわせて実行してみましたがこちらの環境では問題なく動作します。

mysql.phpと呼び出し元のプログラムは同じディレクトリ(又はmysql.phpをパスが切ってある場所に配置)にありますか?

また、Cannot instantiate non-existent class・・・というエラーは継承や呼び出しの順序で発生することがあるようです。

この回答への補足

require_once("mysql.php");で外部クラスファイルを読み込むのでは無く、呼び出し元に直接mysql.phpの内容を記述したら動作するようになりました(^^;)
しかし未だに解らないのですが、
別のテストとして外部ファイルmysql.phpに
echo "こんにちは";
と記述してやると呼び出し元プログラムでも『こんにちは』
と出ていたので、require_once("mysql.php");自体は動作していたハズだと思うのです。なので、
ご指摘の
>『mysql.phpと呼び出し元のプログラムは同じディレクトリ(又はmysql.phpをパスが切ってある場所に配置)にありますか?』
は正常だと思いますし、
>『Cannot instantiate non-existent class・・・というエラーは継承や呼び出しの順序で発生することがあるようです』
も、今回のrequire_once("mysql.php");を直接記述にすり替えたテストでは正常な点を考えると、継承や呼び出しの順序も合っていたのでは無いかと思うのです。。
当然他にも何か考えられる原因はあるのだとは思いますが・・・

でも、とりあえずは動作するようになりましたので、安心しました☆
色々と突っ込んでお聞かせ頂きましたが、ご親切に対応して下さったNatsumickeさんありがとうございます★☆
今回のすり替えのテスト内容に対して、差し当って何かお考えがありましたらご返信お待ちしております。
本当にありがとうございます♪♪

補足日時:2007/09/11 15:36
    • good
    • 0

こんにちは。



mysql.phpにあるクラス名は「MySQL」で間違いありませんか?
また、インスタンスを作成するときは
mysql = new MySQL();
のように()を記述します。

この回答への補足

ご指摘ありがとうございます☆
早速『mysql = new MySQL();』と記述を訂正して実行してみたのですが、やはり同じエラーが出てしまいます。
mysql.phpにあるクラス名も「MySQL」で間違いないのですが・・・
mysql.phpのソースも公開しますので、何かお分かりでしたらお助け下さい。宜しくお願いします!
------------------mysql.php-------------------------------------
<?php
//======================================================================
// ■:MySQL クラス
//======================================================================
class MySQL{
//---------------------------
// □:変数の宣言
//---------------------------
var $m_con;
var $m_HostName = "";
var $m_UserName = "";
var $m_Password = "";
var $m_Database = "";
var $m_Rows = 0;
//---------------------------
// □:コンストラクタ
//---------------------------
function MySQL(){
$filename = "mysql.ini";//<==Windows
$fp = fopen($filename,"r");
if (!$fp){
die("mysql.iniファイルが存在しません。");
}else{
$this->m_HostName=trim(fgets($fp));
$this->m_UserName=trim(fgets($fp));
$this->m_Password=trim(fgets($fp));
$this->m_Database=trim(fgets($fp));
}
fclose($fp);

//MYSQLへ接続
$this->m_con = mysql_connect($this->m_HostName,$this->m_UserName,$this->m_Password);
if (!$this->m_con){
die("MYSQLの接続に失敗しました。");
}
//データベースを選択
if (!mysql_select_db($this->m_Database,$this->m_con)){
die("データベースの選択に失敗しました。DB:{$this->m_Database}");
}
}
//---------------------------
// SQLクエリの処理
//---------------------------
function query($sql){
$this->m_Rows = mysql_query($sql,$this->m_con);
if (!$this->m_Rows){
die("MySQLでエラーが発生しました。<br><b>{$sql}</b><br>" .mysql_errno().": ".mysql_error());
}
return $this->m_Rows;
}
//---------------------------
// 検索結果をfetch
//---------------------------
function fetch(){
return mysql_fetch_array($this->m_Rows);
}
//---------------------------
// 変更された行の数を得る
//---------------------------
function affected_rows(){
return mysql_affected_rows();
}
//---------------------------
// 列数
//---------------------------
function cols(){
return mysql_num_fields($this->m_Rows);
}
//---------------------------
// 行数
//---------------------------
function rows(){
return mysql_num_rows($this->m_Rows);
}
//---------------------------
// 検索結果の開放
//---------------------------
function free(){
mysql_free_result($this->m_Rows);
}
//---------------------------
// MySQLをクローズ
//---------------------------
function close(){
mysql_close($this->m_con);
}
//---------------------------
// エラーメッセージ
//---------------------------
function errors(){
return mysql_errno().": ".mysql_error();
}
//---------------------------
// エラーナンバー
//---------------------------
function errorno(){
return mysql_errno();
}

}
?>
---------------------------------------------------------------

補足日時:2007/09/11 03:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!