-1

指定されたユーザー名、パスワード、およびデータベース ホストを使用してデータベースに接続できるかどうかを確認したいと思います。

これまでのところ、私は試していました:

$conn = mysql_connect($dbhost, $dbuser, $dbpass);
$conndatabase = mysql_select_db($dbname);

if(!mysql_ping($conn) || !$conndatabase){ 
    //do something when cant connect 
} else { 
    //do something when you connected
}

$dbnameこのデータベースを選択できないため、悪いと機能します。しかし、間違ったホスト、ユーザー名、またはパスワードを入力すると、エラーのある白いページが表示されます。例えば:

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'rootx'@'localhost' (using password: YES) in C:\xampp\htdocs\strony\planer\config\opendb.php on line 6
Warning: mysql_ping() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\strony\planer\grupy.php on line 3

質問:
指定されたデータを使用してエラーなく接続できるかどうかを確認する方法はありますか? 到達する前にエラーが発生するだけですmysql_ping()

編集
マイク・ブラントのソリューションを試した後、間違って説明できたと思います。データベースに接続しようとしていますが、許可されれば、アクセスしたいユーザーページが表示されますが、それが不可能な場合は、データベース情報を変更するために別のページにリダイレクトされます。

if(!$conndatabase){
    header('Location: index.php');
}

データベースが存在するかどうかを確認するためにそれを使用しています。しかし、私が試しif(!$conn)たり、似たようなことをしたりしても、手遅れです。エラーが表示されたから$conn = mysql_connect($dbhost, $dbuser, $dbpass)です。だから私はリダイレクトできません。

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost'~~
Warning: Cannot modify header information - headers already sent by~~
4

4 に答える 4

2

はい。の値をテストするだけです$conn。その場合false、接続は失敗し、db の選択ステップに進むことさえ試みるべきではありません。

コードは次のようになります。

$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if (false === $conn) {
    throw new Exception('Could not connect to database: ' . mysql_error());
}
$db_select = mysql_select_db($dbname. $conn);
if (false === $db_select) {
    throw new Exception('Could not select database: ' . mysql_error($conn));
}

PHP のドキュメントはこれについて非常に明確です: http://php.net/manual/en/function.mysql-connect.php

ところで、 using mysqlior PDOasmysql_*関数は非推奨です。

于 2013-04-29T21:46:44.223 に答える
1

次のような方法で接続をデバッグしてみてください

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if(!$link){
die('Could not connect: ' . mysql_error());
}

このようにして、接続が確立されているかどうかを簡単に確認できます。そうでない場合は、エラーが出力されます。

mysql_次に、関数が非推奨であることを覚えておきたいので、mysqliまたはに切り替えることをお勧めしますPDO

于 2013-04-29T21:47:07.943 に答える
1

問題の私の編集を見ると、それらの回答が私の問題を完全に解決していないことがわかります。エラーを回避する方法がまだありませんでした。それが私が使用した場所error_reporting(0);です。それが最善の解決策かどうかはわかりませんが、私にとっては魅力的です。したがって、私が達成しようとしたすべてのコードは次のようになります。

opendb.php ファイル

<?php
   $dbhost = 'localhost';
   $dbuser = 'root';
   $dbpass = 'password123';
   $dbname = 'databasename';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   $conndatabase = mysql_select_db($dbname);
?>

そして、サイトで私は接続をチェックしています:

<?php
   error_reporting(0);
   include 'opendb.php';
   if(!mysql_ping($conn) || !$conndatabase){
        header('Location: index.php'); //or any other site where you can config your database connection information.
   }

ええ、それは私の問題に対する完全な解決策です。同じ結果!$connの代わりに使用できると思います。!mysql_ping($conn)

于 2013-05-02T11:37:44.693 に答える