0

次のように、異なるホストに2つの接続データベース(MySQL)があります:

//database 1
$dbhost='localhost';
$dbuser='user1'; 
$dbpass='pass1';
$dbname='dbname1';

//database 2
$dbhostams='192.168.16.3';
$dbuserams='user2';
$dbpassams='pass2';
$dbnameams='dbname2';  

function dbconnection($dbhost,$dbuser,$dbpass,$dbname){
    if(!mysql_connect($dbhost,$dbuser,$dbpass)){
        echo "Error occure on opening connection or database. Period.";
    }else{
        if(!mysql_select_db($dbname)){
            echo "Error occure on select databases !";
        }
    }
}
function dbconnectionams($dbhostams,$dbuserams,$dbpassams,$dbnameams){
    $cxn = mysql_connect($dbhostams,$dbuserams,$dbpassams,$dbnameams);
    if( $cxn === FALSE ) {  
        die('mysql connection error: '.mysql_error()); 
    }else{
        if( !mysql_select_db($dbnameams) ){
            echo "Error occure on select databases !";
        }
    }
}

私が使用するとき:

dbconnection($dbhost,$dbuser,$dbpass,$dbname);

私のページのコードで、次を使用します。

dbconnectionams($dbhostams,$dbuserams,$dbpassams,$dbnameams);

同じページの別のコード行で、次のようなエラーが発生しました。

警告: ユーザーのアクセスが拒否されました: 'apache@localhost' (パスワードの使用: NO) で
/home/firman/html/fdrsimpeg/sdm-aam/include/dbclass.php の 17 行目

警告: MySQL 接続に失敗しました: ユーザーのアクセスが拒否されました: 'apache@localhost'
(パスワードの使用: NO) /home/firman/html/fdrsimpeg/sdm-aam/include/dbclass.php 内
17行目

mysql 接続エラー:

この問題を解決するにはどうすればよいですか?

4

4 に答える 4

0

明らかに間違っているものは何もありませんでした。提供されているコードをテストしたところ、両方の接続が機能しました。

などがphp.ini内に設定されているかどうかmysql.default_userを確認してくださいmysql.default_host

于 2012-05-10T09:51:23.213 に答える
0

グローバル変数 ( $dbhost$dbuserなど) は、関数呼び出しの範囲内にありません。たとえば、これらの関数呼び出しが別の関数内で行われる場合、globalそれらにアクセスするには、キーワードを使用して関数内で変数を宣言する必要があります (そうしないと、PHP はローカルである同じ名前の異なる変数を参照していると見なします)。関数):

function foo() {
  global $dbhost, $dbuser, $dbpass, $dbname;
  dbconnection($dbhost,$dbuser,$dbpass,$dbname);
}

PHP 変数スコープの詳細を参照してください。

于 2012-05-10T09:24:20.353 に答える
0

mysql_connect 関数の 4 番目のパラメーターとして true を渡す必要があります。

$database1 = mysql_connect($host1, $user1, $pass1); 
$database2 = mysql_connect($host2, $user2, $pass2, true); 

mysql_select_db('database1', $database1);
mysql_select_db('database2', $database2);

データベースにクエリを実行するには、次を使用します。

mysql_query('SELECT * FROM table', $database1);
mysql_query('SELECT * FROM table', $database2);

こちらの Stackoverflow でこの回答を確認してください....リンク

于 2012-05-10T09:04:43.033 に答える
0

まず、変数名を変更すると、コードが読みやすくなります... 次に、ユーザー名が「apache」であることを検出しているため、問題は接続にあるようです。関数内の変数名を確認してください...それらを変更して、もう一度やり直してください。

//database 1
$dbhost='localhost';
$dbuser='user1'; 
$dbpass='pass1';
$dbname='dbname1';

//database 2
$dbhostams='192.168.16.3';
$dbuserams='user2';
$dbpassams='pass2';
$dbnameams='dbname2';  

function dbconnection($_dbhost,$_dbuser,$_dbpass,$_dbname){
    if(!mysql_connect($_dbhost,$_dbuser,$_dbpass)){
        echo "Error occure on opening connection or database. Period.";
    }else{
        if(!mysql_select_db($_dbname)){
            echo "Error occure on select databases !";
        }
    }
}
function dbconnectionams($_dbhostams,$_dbuserams,$_dbpassams,$_dbnameams){
    $cxn = mysql_connect($_dbhostams,$_dbuserams,$_dbpassams,$_dbnameams);
    if( $cxn === FALSE ) {  
        die('mysql connection error: '.mysql_error()); 
    }else{
        if( !mysql_select_db($dbnameams) ){
            echo "Error occure on select databases !";
        }
    }
}
于 2012-05-10T09:08:07.790 に答える