0

私はPHP OOPに比較的慣れていないので、SOについて多くの質問があることを知っていますが、どれも私を正しい方向に向けていません。クラス ユーザーを作成し、これを別のファイルで呼び出しています。

メソッド「リセット」を取得して「接続」を呼び出し、mysql dbに接続してからクエリを実行し、さまざまなプロパティを行の内容に設定しようとしています。

エラーは発生していませんが、何らかの理由でプロパティにデータベースからのデータが供給されていません。

メソッド間で変数を渡すことができないかどうかを確認するためだけに、リセット メソッドに mySQL 接続を配置しようとしました。しかし、まだ喜びはありません。

誰かが私を正しい方向に向けることができますか?

class user(){
  public function reset(){
    $this->connect();
    $sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
    $result = mysqli_query($con,$sql);

    while($row = mysqli_fetch_array($result))
  {
      $this->user_name=$row['dtype'];
      $this->user_id=$row['user_id'];
      $this->atype=$row['atype'];
      $this->user_email=$row['user_email'];
      $this->group1=$row['group1'];
      $this->group2=$row['group2'];
      $this->group3=$row['group3'];
      $this->group4=$row['group4'];
      $this->group5=$row['group5'];
      $this->group6=$row['group6'];   
  }

            // Test that these properties are actually being echoed on initial file... it is
    //  $this->user_name = "john";  
    //  $this->user_email = "john@gmail.com";
    //  $this->dtype = "d";
    //  $this->atype = "f";
}

public function connect(){
            //GLOBALS DEFINED IN INDEX.PHP
        if ($db_open !== true){
        $con=mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
    // Check connection
    if (mysqli_connect_errno())
      {
        $debug_system .= 'Error on user.php: ' . mysqli_connect_error().'<br\/>';
      } else {
        $db_open = true;
        $debug_system .= 'user.php: user details grab successful. <br\/>';
         }
}
}

}

4

2 に答える 2

2

PHP OOP に比較的慣れていない場合は、ひどい mysqli API をいじるのではなく、最初に非常に賢明なPDOを学習することを強くお勧めします。それから、OOP と準備されたステートメントのいずれかに慣れてから、mysqli に目を向けることができます。

connect()それにもかかわらず、クラスに関数が存在しないことはありませんuseruserクラスのコンストラクターでインスタンスを渡す必要がある、別個のデータベース処理クラスが必要です。

于 2013-11-05T11:18:04.280 に答える
1

問題は次の行にあります。

$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;

実際に を定義することは決してありません$user_id。おそらく、あなたは実際に$this->user_id.

$sql ='SELECT * FROM users WHERE user_id="'.$this->user_id.'"' ;

さらに良いのは、次のようなパラメータ化されたクエリを最大限に活用することです。

$sql ='SELECT * FROM users WHERE user_id=?' ;

次にprepare、ステートメントとbindユーザー ID、次にexecuteクエリを実行します。

$stmt = mysqli_prepare($sql);
mysqli_stmt_bind_param($stmt, $this->user_id);
mysqli_stmt_execute($stmt);

そして、結果を取得します。

while($row = mysqli_stmt_fetch($result))

ご覧のとおり、最新の MySQL ライブラリにはさらに負荷がかかっています。さらに使用する前に、MySQLi とパラメーター化されたクエリがどのように機能するか (そしておそらく PDO も優れたライブラリです) についてさらに調査することをお勧めします。努力する価値はあります。

于 2013-11-05T11:25:44.253 に答える