- PR -

PHPによるMySQL接続について

1
投稿者投稿内容
芋ロックと豚足
会議室デビュー日: 2006/02/12
投稿数: 3
お住まい・勤務地: 福岡県
投稿日時: 2006-02-12 18:43
はじめまして。
個人的にPHPとMySQLを使ったシステムを作成しています。
他サイトや参考書(技術評論社:PHP+MySQLで作る最速Webシステム)で調べてみたのですが
解決に繋がる情報が無かった為投稿しました。

結果が同じのPHPプログラムを2パターン作成しました。
(PHPからMySQLに接続するだけのプログラム)
1つは期待通りの結果だったのですが、残り1つは以下のメッセージが表示されます。

Warning: mysql_connect()[function.mysql-connect]:Access denied for user
'ODBC'@'localhost'(using password:NO) in ファイル名 on line 行

プログラムは以下の通りです。

----- パターン1(期待通りの結果) -----
<?php
$DBSERVER="localhost";
$DBUSER="root";
$DBPASSWORD="test";
$DBNAME="demodb";

$w_Session = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
if($w_Session) {
print "セッション確立OK.";
$w_Db = mysql_select_db($DBNAME, $w_Session);

} else {
print "セッション確立NG.";

}
?>

----- パターン2(NG) -----
<?php

$smp = new CSample;

if( $smp->MySession($db) == 0 ){
print "接続完了!";
} else {
print "接続失敗!";
}

class CSample{
private $m_sDbServer;
private $m_sDbUser;
private $m_sDbPassWord;
private $m_sDbName;
private $m_oSession;

public function CSample(){
$this->m_sDbServer= "localhost";
$this->m_sDbUser= "root";
$this->m_sDbPassWord= "test";
$this->m_sDbName= "demodb";

}

public function MySession(&$out_db ){
$i = 0;
$this->m_oSession = mysql_connect($this->m_sDbServer, $this->m_sDbUser, $this->m_sDbPassWord);
if($this->m_oSession) {
$out_db = mysql_select_db($this->m_sDbName, $this->m_oSession);

} else {
$i = 1;

} return i;
}

?>

<環境>
OS : Windows2000
WWW: Apache2.0.54
PG : PHP5.1.1
DB : MySQL5.0.4-beta-nt

アドバイスお願い致します。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2006-02-12 19:00
こんばんは

Warning: mysql_connect()[function.mysql-connect]:Access denied for user
'ODBC'@'localhost'(using password:NO) in ファイル名 on line 行

ODBC@localhostってなっているので ユーザ名に ODBCがセットされていませんか?

このエラーはユーザが登録されていなかったり権限が無い場合に出ていた記憶がありますが...
芋ロックと豚足
会議室デビュー日: 2006/02/12
投稿数: 3
お住まい・勤務地: 福岡県
投稿日時: 2006-02-12 19:06
こんばんは。
早速の返信ありがとうございます。

>ODBC@localhostってなっているので ユーザ名に ODBCがセットされていませんか?
・・・すいません、ODBCがセットされている、されていないとはどういうことでしょうか。
今までこのようなメッセージに遭遇したことが・・・無かったためか無知でした。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2006-02-12 19:46
えーと、正しく例のようにユーザ名、パスワード、ホスト名が渡っていて
エラーだったなら

'root'@'localhost'(using〜
なエラーになると思います。

DB接続USERにODBCという文字列が渡っていて、ODBCユーザにアクセス権が無いというエラーだということです。
ODBCユーザが無い場合も多分同じエラーです。

mysql_connectを呼び出す直前にprint文などをいれて正しい接続情報が渡っているかを確認してください。
芋ロックと豚足
会議室デビュー日: 2006/02/12
投稿数: 3
お住まい・勤務地: 福岡県
投稿日時: 2006-02-12 21:51
未記入さん、返信ありがとうございます。
結果報告が遅くなりすいませんでした。

>mysql_connectを呼び出す直前にprint文などをいれて正しい接続情報が
>渡っているかを確認してください。
最初にデバッグをすべきでした。
ご指摘どおり、直前で変数値を出力した結果、全て値が空白になっていました。

よって、試行錯誤しながら修正を行なった結果、先ほど正常なデータをMySQL関数に
渡して接続することの確認がとれました。
以下が最終的なコーディングとなりました。


<?php

$app = new CSample2;
if( $app->MySession() == 0 ) {
print "<br>接続OK!";

} else {
print "<br>接続NG!";

}

//基本クラス
class CSample1{
//メンバー変数定義 (PRIVATE)
private $m_sSrv;//接続ホスト名
private $m_sUsr;//接続ユーザー名
private $m_sPsw;//接続パスワード
private $m_sDbn;//接続先データベース名

private $m_oSsn;
private $m_oDb;

//[ CSample1 ] コンストラクタ
public fucntion CSample1(){
$this->m_sSrv = "localhost";
$this->m_sUsr="root";
$this->m_sPsw="test";
$this->m_sDbn="demodb";
}

//メソッド定義 (PUBLIC)
public function getDbSrv() {
return $this->m_sSrv;
}

public function getDbUsr() {
return $this->m_sUsr;
}

public function getDbPsw() {
return $this->m_sPsw;
}

public function getDbDbn() {
return $this->m_sDbn;
}

public fucntion setDbObject( $s, $d){
$this->m_oSsn = $s;
$this->m_oDb = $d;
}
}

//継承クラス
class CSample2 extends CSample1{
public function MySession() {
$w_rt = 0;
$w_ss=mysql_connect( $this->getDbSrv(). $this->getDbUsr(), $this->getDbPsw() );

if( $w_ss ) {
$w_db = mysql_select_db( $this->getDbDbn(), $w_ss );

if( $w_db ) {
$this->setDbObject( $w_ss, $w_db );
} else {
$w_rt = 1;
}

} else {
$w_rt = 1;

} return $w_rt;
}
}

?>

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)