• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クラスファイルでエラーが出てしまう)

クラスファイルでエラーが出てしまう

このQ&Aのポイント
  • 外部クラスファイルを読みこんで実行させたいのですが、mysqlクラスのインスタンス化でエラーが発生しています。
  • ソースコードでは、mysql.phpを読み込んでmysqlクラスのインスタンスを作成しているが、存在しないクラスをインスタンス化しようとしているためエラーが発生している。
  • mysql.phpはブラウザで直接呼び出してもエラーは発生しないため、クラスファイルの読み込み自体は成功している可能性がある。有識者の方に助言を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1です。 載せていただいたmysql.phpとあわせて実行してみましたがこちらの環境では問題なく動作します。 mysql.phpと呼び出し元のプログラムは同じディレクトリ(又はmysql.phpをパスが切ってある場所に配置)にありますか? また、Cannot instantiate non-existent class・・・というエラーは継承や呼び出しの順序で発生することがあるようです。

HYSTER
質問者

補足

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さんありがとうございます★☆ 今回のすり替えのテスト内容に対して、差し当って何かお考えがありましたらご返信お待ちしております。 本当にありがとうございます♪♪

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

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

HYSTER
質問者

補足

ご指摘ありがとうございます☆ 早速『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(); } } ?> ---------------------------------------------------------------

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPでredeclareのエラーがでるのですが...

    こんにちわ、 現在PHP4でweb作成をしています。それで認証はPHPLIBを使用しているのですが、 「Fatal error: Cannot redeclare class db_sql in /usr/local/apache/phplib-7.4/php/db_pgsql.inc on line 12」 というエラーがでます。 ただ、DB_Sqlというクラスはこのdb_pgsql.incでのみしか使用しておらず(class DB_Example extends DB_Sqlはlocal.inc内で使用しています)、原因が解りません。 おそらく、.htaccess内でprepend.phpをauto_prepend_fileと指定していて、そのprepend.phpのなかで、 (前略) require($_PHPLIB["libdir"] . "db_pgsql.inc"); require($_PHPLIB["libdir"] . "ct_sql.inc"); require($_PHPLIB["libdir"] . "session4.inc"); require($_PHPLIB["libdir"] . "session4_custom.inc"); require($_PHPLIB["libdir"] . "auth4.inc"); require($_PHPLIB["libdir"] . "perm.inc"); require($_PHPLIB["libdir"] . "user4.inc"); require($_PHPLIB["libdir"] . "menu.inc"); require($_PHPLIB["libdir"] . "local.inc"); require($_PHPLIB["libdir"] . "page4.inc"); : (後略) としているために、毎回db_pgsqlがよみこまれるためだとおもいますが、よくわかりません。 質問として漠然としていますが、もしもエラーについてすこしでもなにかしっている方、アドバイスの方、宜しくお願いします。 ちなみにphplib-7.4をインストールしてからかえたのは、 -- .htaccessをかえた(auto_prepend_fileをかえた) -- prepend.phpのdb_mysqlをdb_pgsqlにかえた くらいです。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • どうしてもPHPのエラーが消えまえん。

    今週からPHPを勉強し始めました。 書籍を元に勉強をしているのですが、書籍通りの内容で書き、 どんなに調べても、どうしてもエラーが消えません。 お知恵をお貸し頂けると幸いです。 エラー内容はコチラです。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':20130514235839, created="2013-05-15 08:27:09"' at line 1 エラーページのコードは下記です。 <?php session_start(); require('../function.php'); if(!isset($_SESSION['sign_up'])){ header('Location: index.php'); exit(); } if (!empty($_POST)) { // 登録処理をする $sql = sprintf('INSERT INTO members SET name="%s", mail="%s", pass="%s", image=:%s, created="%s"', mysql_real_escape_string($_SESSION['sign_up']['name']), mysql_real_escape_string($_SESSION['sign_up']['mail']), mysql_real_escape_string(sha1($_SESSION['sign_up']['pass'])), mysql_real_escape_string($_SESSION['sign_up']['image']), date('Y-m-d H:i:s') ); mysql_query($sql) or die(mysql_error()); unset($_SESSION['sign_up']); header('Location: finish.php'); exit(); } 念のため、phpmyadminの画面をあげておきます。 http://cl.ly/image/3M002J1S0q0N 以上よろしくお願い致します。

    • ベストアンサー
    • PHP
  • エラーが出ます。myswl

    <?php $_POST['form']; $db_server = "mysql84.heteml.jp"; $db_username = "******"; $db_password = "******"; $mysql = mysql_connect($db_server, $db_username, $db_password); if ($mysql) { $table_name= "kensaku"; $mysql= ""; mysql_select_db($table_name, $mysql); mysql_set_charset("ECU"); $sql = "SELECT kai, tiiki, syoku, kei FROM kensaku" . "WHERE tiiki = '" . mysql_real_escape_string($tiiki) . "'"; $result = mysql_query($sql); if ($result) { $data_count = mysql_num_rows($result); for($i = 0; $i < $data_count; $i++) { $row = mysql_fetch_row($result); $j = 0; $data[$i]['kai'] = $row[$j++]; $data[$i]['tiiki'] = $row[$j++]; $data[$i]['syoku'] = $row[$j++]; $data[$i]['koyou'] = $row[$j++]; } mysql_free_result($result); } else { $error['top'] = "データベースのエラーです。" . mysql_error(); } mysql_close($mysql); } if (isset($error)) { echo $error['top']; } else { for($i = 0; $i < $data_count; $i++) { echo $data[$i]['kai'] . "|" . $data[$i]['tiiki'] . "|" . $data[$i]['syoku'] . "|" . $data[$i]['koyou'] . "<br />"; } } ?> 書き忘れとかあればおしえてください。

    • 締切済み
    • PHP
  • エラーの意味

    $con=mysql_connect(localhost,***,***); mysql_select_db("shopdb"); $passwd=mysql_real_escape_string($_POST['passwd']); $email=mysql_real_escape_string($_POST['email']); $name=mysql_real_escape_string($_POST['name']); $sql="select * from users where email={$email} and passwd={$passwd}"; $_SESSION['name']=$name; $rs=mysql_query($sql); if(mysql_num_rows($rs)>0){ $_session['login']=1; header("localhost:". "top.php"); exit; } を入力したら Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource が出てしまいました・・・ なんのエラーでしょうか?

    • ベストアンサー
    • PHP
  • ログインページ

    PHPとMySQLで ログインするときに、ログインIDとパスワード(md5処理)を 入力する普通のログインページをつくったのですが 照合するときに例えば ログインIDがphp パスワードが178だとログインできず ログインIDがabe パスワードがabeだとログインできる ログインIDがパスワード一致の場合だけ何故かログインできて しまうのですが、自分で書いていてなんなんですが 以下のプログラムではそういう風になってしまうんでしょうか。 <?php if($_POST["keep_login"] != ""){ session_set_cookie_params(365*25*3600); }else{ session_set_cookie_params(0); } session_start(); require("config.php"); if($_POST["passwd"]==""){ $_POST["passwd"]=time(); } if($_POST["action"]=="login"){ $login_id = mysql_real_escape_string($_POST["login_id"]); $sql="select * from users where login_id= '$login_id' and state='0'"; $result=mysql_query($sql); $users=mysql_fetch_array($result); if($users["passwd"]==md5($_POST["passwd"])){ $_SESSION["login_id"]=$_POST["login_id"]; $_SESSION["auth_code"]=md5($magic_code.$_POST["login_id"]); $_SESSION["name_kanji"]=$users["name_kanji"]; $sql="update users set login_date = '".date('Y-m-d H:i:s')."' where login_id= '".mysql_real_escape_string($_POST['login_id'])."' and state='0'"; $result=mysql_query($sql); if($_GET["redirect"] !=""){ header("Location:".$_GET["redirect"]); exit; }else{ header("Location:".$site_url); exit; } }else{ $message='<br><br><font color="red">ログインできませんでした</font><br>'; } } ?>

    • 締切済み
    • PHP
  • よくわかるPHPの教科書から、

    「Twitter風ひとこと掲示板」の作成でのエラー。 [OK] ・データーベース作成 ・会員登録画面から登録可能 ・データベースを見ると登録されていること確認 http://higelatta.bob.buttobi.net/nise_twitter/index.php http://higelatta.bob.buttobi.net/nise_twitter/login.php [NG] ・ログイン画面でログイン後、TOPのindex.php画面に飛んだとき、エラーが発生 ■エラー内容 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1 以上です。 SQL文にエラーがありますと、バージョンがどーのこーのといっているようですが、 具体的な解決方法がわかりません。 以下に、TOPのindex.phpのソースを少々添付いたします。 <?php session_start(); require('dbconnect.php'); if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { // ログインしている $_SESSION['time'] = time(); $sql = sprintf('SELECT * FROM members WHERE id=%d', mysql_real_escape_string($_SESSION['id']) ); $record = mysql_query($sql) or die(mysql_query()); $member = mysql_fetch_assoc($record); } else { // ログインしていない header('Location: login.php'); } // 投稿を記録する if (!empty($_POST)) { if ($_POST['message'] != '') { $sql = sprintf('INSERT INTO posts SET member_id=%d, message="%s", reply_post_id=%d, created=NOW()', mysql_real_escape_string($member['id']), mysql_real_escape_string($_POST['message']), mysql_real_escape_string($_POST['reply_post_id']) ); mysql_query($sql) or die(mysql_error()); header('Location: index.php'); } } // 投稿を取得する $page = $_REQUEST['page']; if ($page == '') { $page = 1; } $page = max($page, 1); 以上です。 長々と申し訳ありません。 おそらく、 if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { 付近に問題があるのかなと思うのですが、 詳しい方ご教授願います。

    • ベストアンサー
    • PHP
  • PHP エラー

    PHP勉強中の初心者です。会員登録画面を作り動作確認しているのですが ログインするときに下記のエラーが出ます。 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'nakahiro7'@'localhost' (using password: NO) in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 15 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 15 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'nakahiro7'@'localhost' (using password: NO) in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 16 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 16 Warning: mysql_query() [function.mysql-query]: Access denied for user 'nakahiro7'@'localhost' (using password: NO) in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 18 Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 18 Access denied for user 'nakahiro7'@'localhost' (using password: NO) login.phpのソースは下記です <?php require('dbconnect.php'); session_start(); if ($_COOKIE['email'] != ''){ $_POST['email'] = $_COOKIE['email']; $_POST['password'] = $_COOKIE['password']; $_POST['save'] = 'on'; } if(!empty($_POST)) //ログインの処理 if ($_POST['email'] != '' && $_POST['password'] != ''){ $sql = sprintf('SELECT * FROM member WHERE email="%s" AND password="&s"', mysql_real_escape_string($_POST['email']), mysql_real_escape_string(sha1($_POST ['password']))); $record = mysql_query($sql) or die(mysql_error()); if ($table = mysql_fetch_assoc($record)) { //ログイン成功 $_SESSION['id'] = $table['id']; $_SESSION['time'] = time(); //ログイン情報を記録する if ($_POST['save'] == 'on') { setcookie('email',$_POST['email'],time()+60*60*24*14); setcookie('password',$_POST['password'], time()+60*60*24*14); } header('Location: index.php'); exit();}else{ $error['login'] = 'failed'; }}else{ $error['login'] = 'blank'; } ?> <div id="lead"> <p>アドレスとパスワードを入力しログインしてください</p> <p>メンバーズ登録がまだの方はこちら</p> <p>&raquo;<a href="join/">メンバーズ登録をする</a></p> </div> <form action="" method="post"> <d1> <dt>アドレス</dt> <dd> <input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['email']); ?>" /> <?php if($error['login'] == 'blank'): ?> <p class="error">*アドレスとパスワードを記入ください</p> <?php endif; ?> <?php if ($eoor['login'] == 'failed'): ?> <p class="error">*ログインに失敗しました。正しく入力してください。</p> <?php endif; ?> </dd> <dt>pasword</dt> <dd> <input type="password" name="password" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['password']); ?>" /> </dd> <dt></dt> <dd><input id="save" type="checkbox" name="save" value="on"> <label for="save">次回から自動的にログイン</label> </dd> </d1> <div> <input type="submit" value="Log in"/></div> </form> ググりまくりましたが解決できませんでした。 エラーの解決方法 その他ご指摘ありましたらお願いいたします。

    • ベストアンサー
    • PHP
  • phpでログイン時のIDチェック

    phpでIDとパスワードを入力してもらいそれをチェックしてログインするシステムを作っています。 普通にログインはできるのですがIDがsから始まりその後に数字が7桁来れば会員専用のメイン画面に移行し、それ以外のIDであれば普通のメイン画面に移行するプログラムを書きたいです。 例)IDがs1234567であれば会員用の画面、それ以外s1234,1234567,d1234567などのIDであれば違う画面に移行したいです。 自分が書いたコードはこのようになっておりこちらをどのように改良していけばこのようなプログラムが書けるか知りたいです。 どなたかご教授お願いします。 <?php require('dbconnect.php'); session_start(); if (!empty($_POST)) { // ログインの処理 if ($_POST['name'] != '' && $_POST['password'] != '') { $sql = sprintf('SELECT * FROM members WHERE name="%s" AND password="%s"', mysql_real_escape_string($_POST['name']), sha1(mysql_real_escape_string($_POST['password'])) ); $record = mysql_query($sql) or die(mysql_error()); if ($table = mysql_fetch_assoc($record)) { // ログイン成功 $_SESSION['id'] = $table['id']; $_SESSION['time'] = time(); header('Location: group.php'); exit(); } else { $error['login'] = 'failed'; } } else { $error['login'] = 'blank'; } } ?>

    • ベストアンサー
    • PHP
  • 会員制ログインページ

    会員制ログインページを製作しているのですが なかなかうまくいきません <?php if($_POST["keep_login"] != ""){ session_set_cookie_params(365*25*3600); }else{ session_set_cookie_params(0); } session_start(); //データベースに接続するphpです require("config.php"); if($_POST["passwd"]==""){ $_POST["passwd"]=time(); } //照合しているのですが、いろいろ試した結果ここが おかしいようなのですが if($_POST["action"]=="login"){ $sql = "select * from users where login_id = '".mysql_real_escape_string($_POST["login_id"])."' and state = '0'"; $result=mysql_query($sql); $users=mysql_fetch_array($result); if($users["passwd"]==md5($_POST["passwd"])){ $_SESSION["login_id"]=$_POST["login_id"]; $_SESSION["auth_code"]=md5($magic_code.$_POST["login_id"]); $_SESSION["name_kanji"]=$users["name_kanji"]; $sql="update users set login_date ='".date('Y-m-d H:i:s')."' where login_id='".mysql_real_escape_string($_POST['login_id'])."' and state='0'"; $result=mysql_query($sql); if($_GET["redirect"] !=""){ header("Location:".$_GET["redirect"]); exit; }else{ header("Location:".$site_url); exit; } }else{ $message='<br><br><font color="red">ログインできませんでした</font><br>'; } } ?>

    • 締切済み
    • PHP
  • 2つのクラスファイルの使用方法

    こんにちわ。PHP4.3 PHP5でのクラスについての質問です。 A.cls SQL関連のクラス(検索や登録に使用) B.cls LOG関連のクラス(SQLエラーやページ遷移時に使用) C.php 処理のページ と3つのファイルを作りました。 C.phpでA.clsとb.clsをrequireしてnewで各オブジェクト(A_obj B_obj)を作成します。 A.cls内でDB接続が失敗したり、SQLエラーがあった時に B.clsのメソッドを使用してログを書き出そうとしています。 今はA.cls内の各メソッドでB_objをglobeで呼び出すか引数で渡すかしています。 ここから質問なのですが、 c.phpで作成したB.clsのオブジェクトをA.cls内で使用しようと思えば A.clsの各メソッドでglobeするか引数で渡すかしか方法がないのでしょうか? 各clsファイルの機能がぜんぜん違うので継承は考えていません。 あいまいな質問で申し訳ないのですが、globe、引数以外で方法がありましたら、ご教授お願いします。 PHPのバージョンは4のみOKや5のみOKなどでもかまいません。 よろしくお願いします。

    • ベストアンサー
    • PHP