2013-04-06 3 views
1

조금 전에 코딩했는데 작동하지 않습니다.PHP 디버깅에 도움이 필요합니다.

나는 이것을 더 간단하게 할 수 있다는 것을 알고 있지만, OOP를 사용하려고합니다. 그래서 여기

database.class.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(); 
?> 

나는 나팔이 울려 퍼지는 오류가 거기에 확신 해요 이. 아무도 나를 찾아서 고칠 수 있습니까?

그것은 말한다 : 액세스가 사용자에 대한 거부 ''@ '테스터'

이유는 확실하지 '데이터베이스에'로컬 호스트.

사용자를 루트로 지정했으나 사용 요청한 사용자가 ''(으)로 돌아 왔습니다.

호스트와 데이터베이스를 올바르게 확보했습니다.

내 로컬 루트 사용자에게는 암호가 없습니다. 따라서

아이디어가 있으십니까?

+2

해야한다. 먼저 수정하십시오. –

+0

@ SverriM.Olsen 그게 문제 야. 맞습니다. 전에 그 세부 사항으로 로그인했습니다. –

답변

1

좋아요, 문제는 호스트, 사용자 및 암호가 절대로 설정되지 않는다는 것입니다. database 생성자를 살펴보십시오. 구성 만 설정합니다.

어쨌든 개인 database 속성을 설정하거나 openCon()의 구성 개체를 사용하십시오.

또는 더 나은 것은 config 개체를 스크랩하면됩니다. 지금은 중요한 역할을하지 않습니다. 다만 다음과 같은 database 생성자를 변경하고 함께 할 다음 __destruct() 방법은 아무것도하지 않을 경우

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

마지막으로, 당신은 그것을 포함 할 필요가 없습니다.

+0

감사! 이것은 효과가 있었다. –

0

는 XAMPP 년에 cmd를 를 사용하여 MySQL의 디렉토리로 이동하려고 "C를 : \ XAMPP \ mysql을 \ 빈"다음

및 "MySQL의 -u 루트"를 입력하고 액세스

을 받고 있는지 여부를 확인
+0

예 액세스 권한이 있습니다. –

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는 두 개의 매개 변수를 필요로해야한다, 그래서 그것은`액세스 denied` 오류가 올바른 로그인 정보를 제공하지 않았 음을 의미

mysql_select_db('tester', $etc->Connectionlink) or die(mysql_error()); 
+0

오, 당신은 최고입니다. 감사! –

+0

도와 드리겠습니다 .... –

관련 문제