• 締切済み

mysqlに接続が出来ません

mysqlとphpを使ってウェブアプリを作ろうとしていますが、mysqlへの接続が出来ません。接続に失敗するのではなく「not found」と言われます。試しにgetDebugInfo()の出力は、「Unable to include the DB/.php file for ''」となります。 環境は、WinXpのxampp1.5.5 です。あるサイトで上記のようなメッセージはpearがおかしいのではという記述を見て、xampp自体を再インストールもして見ましたが変わりません。 DB/table共に存在しデータも入っておりコマンドラインからは、アクセスが出来ます。 もう一つデストラクタを宣言していると、以下の様なエラーが出るので コメントアウトしています。 Fatal error: Call to a member function disconnect() on a non-object in hogehoge.php 以下にコードを載せますので何が間違っているのかご教授ください。 ------------------------------------------------------------ require_once("DB.php"); class MyDb {  private $_db;  private $dsn = array(         'phptype' => "mysqli",         'hostspec' => "localhost",         'database' => "vhmaster",         'username' => "webuser",      );  private $option = array(         "autofree"=>TRUE,         "debug"=>1,         "portability"=>DB_PORTABILITY_ALL       );  public function __construct(){    $_db=DB::connect($dsn,$option);    if(DB::isError($_db)){      #print_r(get_loaded_extensions());      die("接続失敗:".$_db->getDebugInfo());    }  }  /*  public function __destruct(){    $_db->disconnect();  }  */ } --------------------------------------------------------

  • PHP
  • 回答数4
  • ありがとう数5

みんなの回答

  • hirosa-ok
  • ベストアンサー率72% (8/11)
回答No.4

「not found」となる原因は、クラス変数で指定したDSNとオプションがDB::connect()にわたっていないためでしょう。 $this->_db = DB::connect($this->dsn, $this->option); でうまくいくのでは。 補足に書かれていたコードのデストラクタの問題はコーディングミスですね。アンダースコア("_")が抜けています。 $this->_db->disconnect(); ですね。(そのあとのエラー判定の部分も修正してください)

lovehiroko
質問者

お礼

回答ありがとうございます。確かに_忘れてました。 しかし、修正しても状況は同じでした。 あれから色々やっていたら突然接続できるようになりました。 結局、何が原因なのか分からないという一番良くない結果となってしまいまいました。同様のことが再発しても対応できないです。 もう一度良く勉強しなおします。 回答を下さった皆さん、ありがとうございました。

  • noro6677
  • ベストアンサー率21% (34/158)
回答No.3

一応クラス化しない状態での上記のソースでの接続は問題ないんですよね? それと多分関係ないと思うけど $dsn="mysqli://~"の形式で書いてDB::connectに送っても動かないですよね? mysqliではなくてmysqiではどうなるか?

lovehiroko
質問者

お礼

色々試していて返事が遅れて申し訳ありません。 前に書いたクラス化したコードを止めて、クラスを使わないPEARライブラリを使ったコードを作り試したらキチンと動いたので、そのコードを改めてクラス化してみたらなんと動きました。特にやってる事に変わりはないのですが、分けが分かりません。 相変わらずデストラクタを活かすと ”Fatal error: Call to a member function disconnect() on a non-object in ...” とか言われますし 以下にそのコードを載せます。今度はパスワードも設定してます。 ----------------- code ------------------ <?php require_once("DB.php"); class MyDbAcs extends DB {  private $_db;  public function __construct(){   $dsn= "mysqli://webuser:webuser01@localhost/vhmaster";   $this->_db=DB::connect($dsn);   if(DB::isError($_db)){    die("接続失敗:".$db->getMessage());   }   return $this->_db;  }  public function getIssue($handler,$limit,$page){   $hdl_name = "'" . $handler . "'";   $of = $limit * $page;   $sql="SELECT * FROM vul WHERE handler=$hdl_name ORDER BY udate DESC LIMIT $limit OFFSET $of";   return $this->_db->query($sql);  }  /* 何故かエラーになるのでコメントアウト  public function __destruct(){   $this->db->disconnect();   if(DB::isError($db)){    die("Destructor:".$db->getMessage());   }  }  */ }//--------------- End of MyDbAcs ------------------------ /***************************************   Main stream ****************************************/ $db = new MyDbAcs(); $rs = $db->getIssue("suzuki",20,2); print("<table border=\"1\">");  while($row=$rs->fetchRow(DB_FETCHMODE_ASSOC)){   $id=$row['id'];   $name=$row['name'];   $progress=$row['progress'];   $udate=$row['udate'];   print("<tr>");   print("<td>$id</td><td>$name</td><td>$progress</td><td>$udate</td></tr>\n");  } print("</table>\n"); ?>

  • noro6677
  • ベストアンサー率21% (34/158)
回答No.2

ちょい記憶が曖昧なんですが >パスワードについては、初め設定していたのですが、どうにもおかしいのでよりシンプルにしようと思い一時的に外しております。 パスワードはなしに設定していてもデータとして 空("")データを送らないとダメだった記憶があります。

lovehiroko
質問者

お礼

ありがとうございます。 pearのdsnでは、passwordが無い場合は省略可でした。 何をやってもさっぱり駄目です。 このクラスにしているのが駄目なんでしょうか? 実はクラスを作るのは初めてなので、その辺も影響しているのかなー等と考えてしまいます。

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.1

こんばんは。 さて、システム全体の様子が把握できていないのですが、ざっと見た限りでいえることは (1)DBに接続の際、パスワードも必要だと思うのですが、ご質問を見る限りでは書かれていないようなのですが… (2)DB.php のあるディレクトリと、ご質問のコードが存在するphpファイルのあるディレクトリとが同一でないのでは。 以上、2点です。解決につながってくれればいいのですが。

lovehiroko
質問者

お礼

回答ありがとうございます。 環境は、WindowsXPにXAMPPを標準インストールしただけです。 パスワードについては、初め設定していたのですが、どうにもおかしいのでよりシンプルにしようと思い一時的に外しております。 また、DB.phpはpearのディレクトリにあり、include_pathに設定しているので問題ないかと思いますが... 先ほど、書店で見たサンプルコードにpearを利用した自作クラスはDBクラスを継承していたので、同じようにして見ましたが変化ありません。 class MyDb extends DB { <--継承してみました。 private $_db;

関連するQ&A

  • PEAR::DBでのMySQL接続

    初心者で、環境が分からなくて困っています。 環境は、OS:Win2000 , PHP-V5.2.4 , MySQL-V5.0.45 , PEAR::DB -V1.7.13 です。 MySQLと、PEAR::DBをインストールして、CONNECTするPGを実行したところ、CONNECTエラーとなりました。 1.PHPソース require_once("DB.php"); $dsn="mysqli://pearusr:pearpass@localhost/pear"; $option=array( "autofree"=> TRUE, "debug"=>3, "portability"=> DB_PORTABILITY_ALL); $db=DB::connect($dsn,$option); if(DB::isError($db)){ die("接続失敗:".$db->getMessage().$db->getCode().$db->getDebuginfo()); } print("データベースへの接続に成功しました。"); $db->disconnect(); 2.エラーメッセージ 接続失敗:DB Error: connect failed-24 [nativecode=Can't connect to MySQL server on 'localhost' (10061)] ** mysqli://pearusr:pearpass@localhost/pear MySQL側の環境について、他QAでいろいろ教えていただき、ちゃんと起動できていそうです。 そうすると、次に疑うのは、PEAR::DBの環境がおかしいのではないか? という想像のもと、PEAR::DBの環境設定まわりで、確認すべき項目を教えていただけませんか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • MySqlに接続できない

    環境:PHP5,MySql5,XP 下記の構文でDBへの接続エラーがでます。 php.iniでのインクルードpathの設定もあっています。 (DB.phpも上記インクルードpathにあります) 'pear list'コマンドでDBも確かにインストールされています。 これ以外でチェックするところがあれば、教えてください。 <?php // DBクラスモジュールをインクルード require_once("DB.php"); $dbtype = "mysql"; $sv = "localhost"; $dbname = "********"; $user = "root"; $pass = "******"; // データベースに接続する $dsn = "$dbtype://$user:$pass@$sv/$dbname"; $conn = DB::connect($dsn); if (DB::isError($conn)) { die("接続エラー"); } ?>

    • ベストアンサー
    • PHP
  • PHP4でのSmarty派生クラスの定義について

    こんにちはよろしくお願いします。 PHP4でSmarty派生クラスを定義する方法を教えてください。 PHP5のサンプルコードで次のようなものがありました。 PHP4では,「private」が使えないらしいとか,「__construct」ではなくてクラス名がコンストラクタ名になるとかでうまくいかないようです。どのように修正すればよいのでしょうか? また,「__destruct」はどのようにすれば良いのでしょうか?コンストラクタ名とデストラクタ名が同じでよいのでしょうか? よろしくお願いします。 <?php require_once("DB.php"); require_once("Smarty/libs/Smarty.class.php"); class MySmarty extends Smarty { private $_db; public function __construct() { $this->Smarty(); $this->template_dir="../templates"; $this->compile_dir="../templates_c"; $this->_db=DB::connect("sqlite://localhost/samples.db"); } public function __destruct() { $this->_db->disconnect(); } public function getDb() {return $this->_db;} } ?>

    • ベストアンサー
    • PHP
  • FC4でmysqlを使用して PEAR DB への接続ができない

    FC4に、yumでPHP5.0.4、php-pear-5.0.4、php-mysql-5.0.4、(mysql-4.1.20,mysql-server-4.1.20)をインストールしました。 <?php $con = mysql_connect("localhost","taro","password") or die("接続出来ません"); print "接続しました"; mysql_close($con); ?> を実行すると、「接続しました」と出ます。ところが、 <HTML> <HEAD><TITLE>PHP test</TITLE></HEAD> <BODY> <?php require_once("DB.php"); $dbUser="taro"; $dbPass="password"; $dbHost="localhost"; $dbName="testdb"; $dbType="mysql"; $dsn="$dbType://$dbUser:$dbPass:@$dbHost/$dbName"; $conn = DB::connect($dsn); if(DB::isError($conn)){ die($conn->getMessage()); } print ('DBに接続しました'); $conn->disconnect(); ?> </BODY></HTML> を実行すると、DB Error: connect failed と出て、接続できません。 php.iniは、 include_path = ".:/usr/share/pear:/php/includes" としてあり、 [root@FC4 ~]# ls -l /usr/share/pear/ で調べても drwxr-xr-x 2 root root 4096 5月 27 18:06 DB -rw-r--r-- 1 root root 38937 11月 8 2005 DB.php となっています。 パスの切り方が間違っているでしょうか? どのようにすれば接続できるでしょうか?よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Mysqlの接続について

    現在、以下のようなperlのスクリプトを作っているのですが、mysqlへの接続,切断は以下の場合、どちらにした方がいいのでしょうか? (1)の場合 use DBI; $dsn="DBI:mysql:database=dbname:host=localhost"; $dbh=DBI->connect($dsn,'user','pass'); $sth = $dbh->prepare("SELECT no,title,name,date,host From `table1` where no='1'"); $sth->execute; $sth->fetchrow_array; $sth->finish; $sth2 = $dbh->prepare("SELECT no,title,name,date,host From `table2` where no='1'"); $sth2->execute; $sth2->fetchrow_array; $sth2->finish; $dbh->disconnect; (2)の場合 use DBI; $dsn="DBI:mysql:database=dbname:host=localhost"; $dbh=DBI->connect($dsn,'user','pass'); $sth = $dbh->prepare("SELECT no,title,name,date,host From `table1` where no='1'"); $sth->execute; $sth->fetchrow_array; $sth->finish; $dbh->disconnect; $dsn="DBI:mysql:database=dbname:host=localhost"; $dbh=DBI->connect($dsn,'user','pass'); $sth2 = $dbh->prepare("SELECT no,title,name,date,host From `table2` where no='1'"); $sth2->execute; $sth2->fetchrow_array; $sth2->finish; $dbh->disconnect; (1)の場合と(2)の場合の違いは、(1)の場合、最初にデータベースに接続して、一番最後に切断する事で、(2)の場合、毎回データベースへの接続と切断を行う事が違います。 (2)の場合、毎回接続と切断を行うので、2回ほどではあまり変わらないかもしれないのですが、もし10回とか接続と切断を行うとかなり負荷が高くなるような気がするのですが、他のHPなどを拝見すると接続をしたら切断を行うように癖をつけるようにした方がいいと書かれていたりします。 どちらの方が正しいやり方というか、負荷がすくなく使えるのでしょうか?

    • ベストアンサー
    • Perl
  • mysqlに接続できない?

    XAMPP v3.2.2を使用しています。 Apache 2.4.18 mysqlnd 5.0.12 PHP 7.0.8 phpからmysqlに接続したいのですが $conn = mysql_connect( "localhost", "root", "" ); 上記のコードで Fatal error: Uncaught Error: Call to undefined function mysql_connect() のエラーが表示されます。 Call to undefined function mysql_connect() を検索するといくつか出てきますがどれも解決には至りませんでした。 気になるのは「libmysql.dll」が存在していないことです。 サイトを見ると標準でインストールされるような事が書かれていますがインストールされない場合もあるのでしょうか? それともこのバージョンでは不要なのでしょうか?

    • ベストアンサー
    • MySQL
  • XserverでpearのDBでMySQLに接続

    xserver(レンタルサーバー)でPHPでpearのDBクラスを使ってMySQL(データベース)に接続ができません。 Xserver(レンタルサーバー)環境 MySQL5 バージョン:5.0.77 MySQL5 ホスト名:xxx.xserver.jp(仮名) PHP Version 5.3.3 include_path .:/usr/share/php53/pear :/usr/share/php Xserver PHP関連の仕様一覧 PEARインストール済み <インストール済みライブラリ> ・Archive_Tar ・Auth ・Console_Getopt ・DB ・HTML_Common ・HTML_QuickForm ・HTTP ・HTTP_Header ・HTTP_Download ・Mail ・Net_SMTP ・Net_Socket ・Pager ・PEAR ・XML_Parser ・XML_RPC ・Structures_Grap データベースは同じくXserverに設置されているphpmyadmin(MySQL5)で作成しました。 /xxx.xsrv.jp/public_html/php_sample/Section63 の中に(dbtest2.php) でおいています。 ★以下のコードで接続ができません。 どこが間違っているのか教えて下さい。 ↓ <?php require_once("DB.php"); $dbUser = "sample"; // ユーザー名(仮名) $dbPass = "password"; // パスワード(仮名) $dbHost = "xxx.xserver.jp"; // ホスト名(仮名) $dbName = "sampledb"; // データベース名(仮名) $dbType = "mysql"; // データベースの種類 $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; $conn = DB::connect($dsn); // 接続に失敗したらメッセージを表示して終了します。 if (DB::isError($conn)) { die($conn->getMessage()); } print('接続に成功しました。'); // データベースから切断します。 $conn->disconnect(); ?> ★ちなみにPHPのmysql_connect関数からは接続成功しました。 ↓ <?php $con = mysql_connect("xxx.xserver.jp", "sample", "password") or die("接続できません。"); print "接続に成功しました。"; mysql_close($con); ?>

    • ベストアンサー
    • PHP
  • perlからmysqlに接続できない

    #! c:/perl/bin/perl  use DBI; $user = 'root'; $passwd = 'パスワード'; $db = DBI->connect('DBI:mysql:db1:localhost', $user, $passwd); $sth = $db->prepare("INSERT INTO bunrui VALUES (1,'1st','memo')"); $sth->execute; $sth->finish; $db->disconnect; perlからmysql二接続するためDBIをインストールして、上のようなサンプルコードを実行してみたのですが Internal Server Error になってしまいます。どこかコードが違っているのでしょうか?

    • ベストアンサー
    • Perl
  • mysql_fetch_array()関数でのエラー

    現在、PHPでMySQLの操作をテストしています。 Vista上にXAMPPをインストールした環境とXP上にApache,PHPとMySQLを個別にインストールした環境とで検証しています。 どちらの環境でも、テーブルにデータをインサートするところまでは出来ました。 mysql_fetch_array()関数を使ってSQLの実行結果を表示させるところで、XAMPPでは結果を表示できるのですが、個別インストール環境では Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\****\incert.php on line 8 が出てしまいます。 mysql_error()でエラーを表示させたところ No database selected と表示されます。 mysql_select_db("db_name"); でDBはせんたくされていると思う(事実、XAMPPでは選択されている)のですが、何が問題なのでしょうか?

  • こんにちは、PHP初心者です。

    こんにちは、PHP初心者です。 Smartyを利用してWebサイトを構築中です。 Smarty.classの派生クラスを作成し、コンストラクタ内でDB接続オブジェクトを privateプロパティ($_db)に設定しているのですが$_dbの値が アクセサメソッドを通じてgetすると空白になってしまいます。 色々やってみましたが理由が分からず、 ためしにコンストラクタ内でクエリを実行したところテーブルから値を取得できました。 なぜコンストラクタ外に出るとprivateプロパティの値が取得できなくなるのか分かりません。 どなたかご教示ください。 どうぞよろしくお願いします。 下記ソースです。 *(Smarty.classの派生クラス)********************************************** <?php require_once("DB.php"); require_once("Smarty.class.php"); class MySmarty extends Smarty{ private $_db; public function __construct(){ parent::__construct(); $this->template_dir="C:/xampp/modules/access_control/templates"; $this->compile_dir="C:/xampp/modules/access_control/templates_c"; $this->config_dir="C:/xampp/config"; $this->config_load("access_control.conf",basename($_SERVER['SCRIPT_NAME'],".php")); $tihs->_db=DB::connect($this->get_config_vars('db_string')); if (PEAR::isError($db)) { die($db->getMessage()); } } public function __destruct(){ $this->_db->disconnect(); } public function get_db(){return $tihs->_db;} } ?> *********************************************** *(メインのPHP)********************************************** <?php require_once("../../modules/access_control/class/MySmarty.class.php"); require_once("../../modules/access_control/class/name_search.class.php"); $o_smarty=new MySmarty(); $db=$o_smarty->get_db(); ←ここで値が取得できない $o_smarty->assign("toolname",name_search::getToolName($db)); $o_smarty->display(basename($_SERVER['SCRIPT_NAME'],".php").".tpl"); ?> ***********************************************

    • ベストアンサー
    • PHP

専門家に質問してみよう