1

少し前にこれをコーディングしましたが、機能していません。

これをもっと簡単にできることはわかっていますが、OOPを使用しようとしています。

だからここにコードがあります..

データベース.クラス.php

<?php

class config {

    public $host;
    public $user;
    public $pass;

    function __construct($host=NULL,$user=NULL,$pass=NULL) {

        $this->host = $host;
        $this->user = $user;
        $this->pass = $pass;

    }

    function __destruct() {}

}

class database {

    private $host;
    private $user;
    private $pass;
    private $config;

    function __construct($config) {
        $this->config = $config;
    }

    function __destruct() {}

    public function openCon() {
        mysql_connect($this->host,$this->user,$this->pass);
        if (mysql_errno()) {
            printf('Failed to connect: %s', mysql_error());
        } else {
            echo 'Connected to DB successfully.<br/><br/>';
        }
    }

    public function closeCon() {
        try {
            mysql_close();
            echo 'Successfully closed connection.<br/><br/>';
        } catch (exception $e) {
            echo $e;
        }
    }
}

?>

index.php

<?php
    include('db.class.php');

    $con = new config('localhost','root','');
    $etc = new database($con);
    $etc->openCon();
    mysql_select_db('tester') or die(mysql_error());
    $query1 = mysql_query('SELECT * FROM person') or die(mysql_error());
    $rows = mysql_fetch_array($query1) or die(mysql_error());
        echo 'First: ' . $rows['First'];
        echo 'Age:'    . $rows['Age'];
    $etc->closeCon();
?>

これには明らかなエラーがあると確信しています。誰かがそれらを見つけて修正するのを手伝ってくれますか?

それは言う: データベース 'tester' へのユーザー ''@'localhost' のアクセスが拒否されました

理由がわからない。

ユーザーとして root を指定しましたが、使用を要求したユーザーとして '' が返されました。

ホストとデータベースを正しく取得しました。

私のローカルルートユーザーにはパスワードがないので...

何か案は?

4

3 に答える 3

1

データベースクラスを変更するだけで、すべてが正しいです。$config をオブジェクトとしてデータベース クラスのコンストラクターに渡すので、そのオブジェクトから変数にアクセスするにはほとんど変更が必要ありません。そのはず

 class database {

private $host;
private $user;
private $pass;
private $config;
public $Connectionlink;

function __construct($config) {
    $this->host = $config->host;
    $this->user = $config->user;
    $this->pass = $config->pass;
}

 // function __destruct() {} as your destruct function doing noting so you need not to include this.

public function openCon() {
   $this->Connectionlink= mysql_connect($this->host,$this->user,$this->pass);
    if (mysql_errno()) {
        printf('Failed to connect: %s', mysql_error());
    } else {
        echo 'Connected to DB successfully.<br/><br/>';
    }
}

public function closeCon() {
    try {
        mysql_close();
        echo 'Successfully closed connection.<br/><br/>';
    } catch (exception $e) {
        echo $e;
    }
}
}

mysql_select_db には 2 つのパラメーターが必要なので、

  mysql_select_db('tester', $etc->Connectionlink) or die(mysql_error());
于 2013-04-06T06:12:54.630 に答える
1

問題は、ホスト、ユーザー、およびパスワードが設定されていないことです。databaseコンストラクタを見てください。構成を設定するだけです。

なんらかの方法でプライベートdatabaseプロパティを設定するか、 の構成オブジェクトを使用しますopenCon()

または、さらに良いことに、configオブジェクトをスクラップするだけです。現在、それは重要な役割を果たしていません。database次のようにコンストラクターを変更するだけで完了です。

function __construct($host, $user, $pass) {
    $this->host = $host;
    $this->user = $user;
    $this->pass = $pass;
}

最後に、__destruct()メソッドが何もしない場合は、それを含める必要はありません。

于 2013-04-06T06:10:42.250 に答える
0

xamppの「C:\ xampp\mysql\bin」でcmdを使用して、mysqlディレクトリに移動してみてください

次に、「mysql -u root」と入力して、アクセスできるかどうかを確認します

于 2013-04-06T06:07:25.780 に答える