2017-10-31 10 views
0

PHP MySQL接続のベストプラクティスについて質問があります。 今のところ私は1000行のデータベースを持っています。この列には、たとえば製品の説明が含まれています。しかし行の私は名前がないが名前のIDが、私は色がないが、色などのIDを持っています。テーブルの色と色のIDの変更名は同じです。そんなことはOKですか?MySQLへの複数のPHP接続 - ベストプラクティス

mysqliへの複数の接続で問題が発生することがあるので、私は尋ねています。私の仕事の仕方を以下に示します:

// connection 
     function getConnected($host,$user,$pass,$db) { 

      $mysqli = new mysqli($host, $user, $pass, $db); 
      $mysqli->set_charset("utf8"); 
      if($mysqli->connect_error) 
      die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error()); 


      return $mysqli; 
     } 

     function msq(){ 

      return getConnected('127.0.0.1','root','','database'); 

     } 

// functions 

function getcolor($temp){ 

    $db2=msq(); 

    if($result = $db2->query("SELECT * FROM linkcolor WHERE idcolor='$temp' ")){ 

      if($result->num_rows > 0) { 

       $res = $result->fetch_assoc(); 

       return $res['name']; 

      }else{ 
       return 'none'; 
      } 

    }else{ 
     return 'none'; 
    } 

}  

function getname($temp){ 

    $db2=msq(); 

    if($result = $db2->query("SELECT * FROM linkname WHERE idname='$temp' ")){ 

      if($result->num_rows > 0) { 

       $res = $result->fetch_assoc(); 

       return $res['name']; 

      }else{ 
       return 'none'; 
      } 

    }else{ 
     return 'none'; 
    } 

} 


    // query 

    if($quer = $db->query("SELECT * FROM products")){ 

        if($quer->num_rows > 0) { 

         while($qr = $quer->fetch_assoc()){ 

         echo getcolor($qr['idcolor']); 
         echo getname($qr['idname']); 

         } 

        }else{ 

        } 

     }else{ 

    } 

いいですか?または、mysqlから配列にデータを取得し、クエリをフェッチしているときにそれらを処理する方が良いでしょうか?

+0

あなたの質問のタイトルと本体自体との接続にアクセスすることができます一致しません。どうか明らかにしてください! – Akintunde007

+0

私は彼が何をしようとしているのか理解していると思います。 1つのクエリから結果を取得し、別のクエリの結果を取得する代わりに、2つの接続を開き、同時にアクセスする2つのクエリを設定する必要があります。個人的に私はそれをしません... mysqlとphpは、ページリクエストごとに1つの接続を使用して結果を処理することについてはかなり良いです。 – IncredibleHat

+1

私は正直なところ、他のテーブルから余分な列をIDで取得するようにJOINSを使うことをお勧めします: 'SELECT p。*、n.nameをLinkName、c.nameをColorName FROM products p LEFT JOIN linkname n ON p.idname = n.idname LEFT JOIN linkcolor c ON p.idcolor = c.idcolor' – IncredibleHat

答えて

-1

単一のクエリに対して接続を行うことは難しいので、同じデータベースへの複数の接続が必要です。通常は、スクリプトの開始時に1つのデータベースに1つの接続を行い、最後にデータベースを閉じます。あなたはいつもあなたが作成したmysqliのリンクにアクセスしたり、その目的のために静的なクラスを作成する$GLOBALSを使用することができます。

static class DB { 
    static protected $link = null; 

    static public function getLink() { 
     if (self::$link === null) { 
      self::$link = msq(); 
     } 
     return self::$link; 
    } 
} 

、あなたは

$db2 = DB::getLink(); 
関連する問題