2009-08-20 24 views
3

私は追いかけようとします。このクラスで私が達成できるのは、データベース接続だけです。私は質問をすることができません。この作業をどのようにするか、より良い方法でそれを再コード化する方法を私に教えてください。このmysqliデータベースクラスはどのように動作させることができますか?

<?php 
class database{ 

public $dbHost = ''; 
public $dbUser = ''; 
public $dbPass = ''; 
public $dbName = ''; 

public $db; 

public function __construct(){} 

public function dbConnect(){ 
    $mysqli = new mysqli($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName); 

    /* check connection */ 
    if (mysqli_connect_errno()){ 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    }else{ 
     echo 'connection made'; 
    } 
    /* close connection */ 
    $mysqli->close(); 
} 

public function query($sql){ 
    $query = $sql; 
    self::preparedStatement($query); 
} 

public function preparedStatement(){ 
    if ($stmt = $mysqli->prepare($query)){ 

     /* execute statement */ 
     $stmt->execute(); 

     /* bind result variables */ 
     $stmt->bind_result($name, $code); 

     /* fetch values */ 
     while ($stmt->fetch()) { 
      printf ("%s (%s)\n", $name, $code); 
     } 

     /* close statement */ 
     $stmt->close(); 
    } 
} 

public function __destruct(){} 

} 
?> 

答えて

1

これは私のために働いた。私は私の変更をコメントしました。

<?php 
class database{ 

public $dbHost = ''; 
public $dbUser = ''; 
public $dbPass = ''; 
public $dbName = ''; 

public $db; 

public function __construct(){} 

public function dbConnect(){ 
    ### not $mysqli 
    $this->db = new mysqli($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName); 

    /* check connection */ 
    if (mysqli_connect_errno()){ 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    }else{ 
     echo 'connection made'; 
    } 
    /* close connection */ 
    ### $this->db->close(); // DO NOT close the connection here! 
} 

public function query($sql){ 
    $query = $sql; 
    self::preparedStatement($query); 
} 

public function preparedStatement($query){ ### parameter $query added 

    if ($stmt = $this->db->prepare($query)){ ### not $mysqli->prepare() 

     /* execute statement */ 
     $stmt->execute(); 

     /* bind result variables */ 
     $stmt->bind_result($name, $code); 

     /* fetch values */ 
     while ($stmt->fetch()) { 
      printf ("%s (%s)\n", $name, $code); 
     } 

     /* close statement */ 
     $stmt->close(); 
    } 
} 

public function __destruct(){} 

} 


### Test code 
/* 
$db = new Database(); 
$db->dbHost = '127.0.0.1'; 
$db->dbUser = 'root'; 
$db->dbPass = 'root'; 
$db->dbName = 'test'; 
$db->dbConnect(); 
$db->query('SELECT * FROM test'); 
*/ 
?> 
+0

あなたの素晴らしい!どうもありがとうございます。私はデバッグ中にこれらの変更のほとんどすべてを行ってしまいました。ありがとう。 –

0

あなたは、パラメータを省略している:尋ねる前に自分のコードをデバッグしよう

public function preparedStatement($query) 

(及び、この方法実際静的である必要があります)

次の時間を。単純なecho文でさえ、ここで行われているはずです。

編集:でも、それはうまくいかないでしょう。私はあなたが可変スコープの概念を誤解したと思います。 $mysqliは、ローカル変数として__construct()に設定した場合には、preparedStatement()に保持されないため、そのクラスのインスタンス変数にする必要があります。

+1

はい私はここにいくつかの深刻な問題があることを理解しています。私は3時間は "尋ねる前にあなたのコードをデバッグしようとしている"と考えています。 –

関連する問題