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();
}
*/
}
--------------------------------------------------------
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
「not found」となる原因は、クラス変数で指定したDSNとオプションがDB::connect()にわたっていないためでしょう。
$this->_db = DB::connect($this->dsn, $this->option);
でうまくいくのでは。
補足に書かれていたコードのデストラクタの問題はコーディングミスですね。アンダースコア("_")が抜けています。
$this->_db->disconnect();
ですね。(そのあとのエラー判定の部分も修正してください)
回答ありがとうございます。確かに_忘れてました。
しかし、修正しても状況は同じでした。
あれから色々やっていたら突然接続できるようになりました。
結局、何が原因なのか分からないという一番良くない結果となってしまいまいました。同様のことが再発しても対応できないです。
もう一度良く勉強しなおします。
回答を下さった皆さん、ありがとうございました。
No.3
- 回答日時:
一応クラス化しない状態での上記のソースでの接続は問題ないんですよね?
それと多分関係ないと思うけど
$dsn="mysqli://~"の形式で書いてDB::connectに送っても動かないですよね?
mysqliではなくてmysqiではどうなるか?
色々試していて返事が遅れて申し訳ありません。
前に書いたクラス化したコードを止めて、クラスを使わない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");
?>
No.2
- 回答日時:
ちょい記憶が曖昧なんですが
>パスワードについては、初め設定していたのですが、どうにもおかしいのでよりシンプルにしようと思い一時的に外しております。
パスワードはなしに設定していてもデータとして
空("")データを送らないとダメだった記憶があります。
ありがとうございます。
pearのdsnでは、passwordが無い場合は省略可でした。
何をやってもさっぱり駄目です。
このクラスにしているのが駄目なんでしょうか?
実はクラスを作るのは初めてなので、その辺も影響しているのかなー等と考えてしまいます。
No.1
- 回答日時:
こんばんは。
さて、システム全体の様子が把握できていないのですが、ざっと見た限りでいえることは
(1)DBに接続の際、パスワードも必要だと思うのですが、ご質問を見る限りでは書かれていないようなのですが…
(2)DB.php のあるディレクトリと、ご質問のコードが存在するphpファイルのあるディレクトリとが同一でないのでは。
以上、2点です。解決につながってくれればいいのですが。
回答ありがとうございます。
環境は、WindowsXPにXAMPPを標準インストールしただけです。
パスワードについては、初め設定していたのですが、どうにもおかしいのでよりシンプルにしようと思い一時的に外しております。
また、DB.phpはpearのディレクトリにあり、include_pathに設定しているので問題ないかと思いますが...
先ほど、書店で見たサンプルコードにpearを利用した自作クラスはDBクラスを継承していたので、同じようにして見ましたが変化ありません。
class MyDb extends DB { <--継承してみました。
private $_db;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラー3011
-
テキストボックスに入れた内容...
-
実行時エラー3131 FROM 句の構...
-
Accessのテーブルへ複数の主キ...
-
SELECT文を発行して、ACCESSよ...
-
LocalのNotesメールDBをVBAで参...
-
SQL文が実行できません
-
VBAをつかってクエリの情報を抽...
-
MySQLでデータベースにデータin...
-
insert1つの処理でもトランザ...
-
C#でDBの特定列をUpdate
-
spl拡張子保存
-
PHPで[]の使い方について
-
JAVA SQLServerException 列名 ...
-
MYSQL UPDATE
-
mysqlから取得した配列をカンマ...
-
mysql_fetch_array の速度について
-
phpmyadminにタグを格納するには
-
PHP 10件表示 "前へ" "次へ"
-
会員サイトでログイン後の会員...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
テキストボックスに入れた内容...
-
SQL文が実行できません
-
エラー3011
-
LocalのNotesメールDBをVBAで参...
-
codeigniter 複数モデルでトラ...
-
PEAR でprepareメソッドがエラーに
-
SQL文の実行に失敗しました???
-
SELECT COUNTで取得した結果の表示
-
Accessのテーブルへ複数の主キ...
-
in 'where clause'のエラーの理由
-
VBAについて質問です
-
PEARを使ったフェッチのしかた。
-
例外処理
-
PHPからMySQLを操作
-
phpのPEARのMDB2を使って出たエ...
-
pearのdisconnect()が使えない。
-
時刻型にNULLでセットしたい
-
PHP4でのSmarty派生クラスの定...
おすすめ情報