نمایش نتایج 1 تا 4 از 4

نام تاپیک: اتصال به چند دیتابیس بصورت همزمان

  1. #1
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    محل زندگی
    Tehran
    پست
    29

    Question اتصال به چند دیتابیس بصورت همزمان

    سلام
    من یه کلاس php برای اتصال به چند پایگاه داده mysql بصورت همزمان نوشتم. یه اشکالی توی کد هست که نمیدونم چطور باید رفعش کنم. کد کلاس رو اینجا مینویسم. اگر کسی بتونه راهنمایی کنه ممنون میشم. کلاس Connection بخوبی کار میکنه و میشه باهاش query اجرا کرد. مشکل کلاس Connection_multiple هست که وقتی تعداد کانکشن ها از یکی بیشتر بشه دیگه کار نمیکنه.



    <?php
    interface Connection_Interface
    {
    public function connect($database, $sqlserver, $sqluser, $sqlpassword, $persistency);
    public function disconnect();
    public function sql_query($sql);
    public function sql_numrows($query_id);
    public function sql_affectedrows();
    public function sql_numfields($query_id);
    public function sql_fieldname($offset, $query_id);
    public function sql_fieldtype($offset, $query_id);
    public function sql_fetchrow($query_id);
    public function sql_fetchrowset($query_id);
    public function sql_fetchfield($field, $rownum, $query_id);
    public function sql_rowseek($rownum, $query_id);
    public function sql_nextid();
    public function sql_freeresult($query_id);
    public function sql_error($query_id);
    }




    class Connection implements Connection_Interface
    {
    public $db_connect_id;
    public $query_result;
    public $row = array();
    public $rowset = array();
    public $num_queries = 6;


    public $persistency;
    public $user;
    public $password;
    public $server;
    public $dbname;


    function __construct($database="", $sqlserver = "localhost", $sqluser = "root", $sqlpassword = "", $persistency = true) {
    $this->connect($database, $sqlserver, $sqluser, $sqlpassword, $persistency); // connect using credentials
    }

    public function connect($database, $sqlserver, $sqluser, $sqlpassword, $persistency)
    {

    $this->persistency = $persistency;
    $this->user = $sqluser;
    $this->password = $sqlpassword;
    $this->server = $sqlserver;
    $this->dbname = $database;

    if($this->persistency)
    {
    $this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
    }
    else
    {
    $this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
    }
    if($this->db_connect_id)
    {
    if($database != "")
    {
    $this->dbname = $database;
    $dbselect = @mysql_select_db($this->dbname);
    if(!$dbselect)
    {
    @mysql_close($this->db_connect_id);
    $this->db_connect_id = $dbselect;
    }
    }
    return $this->db_connect_id;
    }
    else
    {
    return false;
    }

    }


    /*function __construct($database="", $sqlserver = "localhost", $sqluser = "root", $sqlpassword = "", $persistency = true)
    {

    $this->persistency = $persistency;
    $this->user = $sqluser;
    $this->password = $sqlpassword;
    $this->server = $sqlserver;
    $this->dbname = $database;

    if($this->persistency)
    {
    $this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
    }
    else
    {
    $this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
    }
    if($this->db_connect_id)
    {
    if($database != "")
    {
    $this->dbname = $database;
    $dbselect = @mysql_select_db($this->dbname);
    if(!$dbselect)
    {
    @mysql_close($this->db_connect_id);
    $this->db_connect_id = $dbselect;
    }
    }
    return $this->db_connect_id;
    }
    else
    {
    return false;
    }
    }*/

    //
    // Other base methods
    //
    function disconnect()
    {
    if($this->db_connect_id)
    {
    if($this->query_result)
    {
    @mysql_free_result($this->query_result);
    }
    $result = @mysql_close($this->db_connect_id);
    return $result;
    }
    else
    {
    return false;
    }
    }

    //
    // Base query method
    //
    function sql_query($query = "", $transaction = FALSE)
    {
    // Remove any pre-existing queries
    unset($this->query_result);
    if($query != "")
    {
    $this->query_result = @mysql_query($query, $this->db_connect_id);
    }
    if($this->query_result)
    {
    unset($this->row[$this->query_result]);
    unset($this->rowset[$this->query_result]);
    return $this->query_result;
    }
    else
    {
    return ( $transaction == END_TRANSACTION ) ? true : false;
    }
    }

    //
    // Other query methods
    //
    function sql_numrows($query_id = 0)
    {
    if(!$query_id)
    {
    $query_id = $this->query_result;
    }
    if($query_id)
    {
    $result = @mysql_num_rows($query_id);
    return $result;
    }
    else
    {
    return false;
    }
    }
    function sql_affectedrows()
    {
    if($this->db_connect_id)
    {
    $result = @mysql_affected_rows($this->db_connect_id);
    return $result;
    }
    else
    {
    return false;
    }
    }
    function sql_numfields($query_id = 0)
    {
    if(!$query_id)
    {
    $query_id = $this->query_result;
    }
    if($query_id)
    {
    $result = @mysql_num_fields($query_id);
    return $result;
    }
    else
    {
    return false;
    }
    }
    function sql_fieldname($offset, $query_id = 0)
    {
    if(!$query_id)
    {
    $query_id = $this->query_result;
    }
    if($query_id)
    {
    $result = @mysql_field_name($query_id, $offset);
    return $result;
    }
    else
    {
    return false;
    }
    }
    function sql_fieldtype($offset, $query_id = 0)
    {
    if(!$query_id)
    {
    $query_id = $this->query_result;
    }
    if($query_id)
    {
    $result = @mysql_field_type($query_id, $offset);
    return $result;
    }
    else
    {
    return false;
    }
    }
    function sql_fetchrow($query_id = 0)
    {
    if(!$query_id)
    {
    $query_id = $this->query_result;
    }
    if($query_id)
    {
    $this->row[$query_id] = @mysql_fetch_array($query_id);
    return $this->row[$query_id];
    }
    else
    {
    return false;
    }
    }
    function sql_fetchrowset($query_id = 0)
    {
    if(!$query_id)
    {
    $query_id = $this->query_result;
    }
    if($query_id)
    {
    unset($this->rowset[$query_id]);
    unset($this->row[$query_id]);
    while($this->rowset[$query_id] = @mysql_fetch_array($query_id))
    {
    $result[] = $this->rowset[$query_id];
    }
    return $result;
    }
    else
    {
    return false;
    }
    }
    function sql_fetchfield($field, $rownum = -1, $query_id = 0)
    {
    if(!$query_id)
    {
    $query_id = $this->query_result;
    }
    if($query_id)
    {
    if($rownum > -1)
    {
    $result = @mysql_result($query_id, $rownum, $field);
    }
    else
    {
    if(empty($this->row[$query_id]) && empty($this->rowset[$query_id]))
    {
    if($this->sql_fetchrow())
    {
    $result = $this->row[$query_id][$field];
    }
    }
    else
    {
    if($this->rowset[$query_id])
    {
    $result = $this->rowset[$query_id][$field];
    }
    else if($this->row[$query_id])
    {
    $result = $this->row[$query_id][$field];
    }
    }
    }
    return $result;
    }
    else
    {
    return false;
    }
    }
    function sql_rowseek($rownum, $query_id = 0){
    if(!$query_id)
    {
    $query_id = $this->query_result;
    }
    if($query_id)
    {
    $result = @mysql_data_seek($query_id, $rownum);
    return $result;
    }
    else
    {
    return false;
    }
    }
    function sql_nextid(){
    if($this->db_connect_id)
    {
    $result = @mysql_insert_id($this->db_connect_id);
    return $result;
    }
    else
    {
    return false;
    }
    }
    function sql_freeresult($query_id = 0){
    if(!$query_id)
    {
    $query_id = $this->query_result;
    }

    if ( $query_id )
    {
    unset($this->row[$query_id]);
    unset($this->rowset[$query_id]);

    @mysql_free_result($query_id);

    return true;
    }
    else
    {
    return false;
    }
    }
    function sql_error($query_id = 0)
    {
    $result["message"] = @mysql_error($this->db_connect_id);
    $result["code"] = @mysql_errno($this->db_connect_id);

    return $result;
    }

    } // class sql_db




    class Connection_Multiple implements Connection_Interface
    {
    protected $_connections = array();
    public $connection_index = "";

    public function __construct() {
    }

    public function add(Connection $connection)
    {
    $this->connection_index = sizeof($this->_connections);
    $this->_connections[$this->connection_index] = $connection;
    return $this->connection_index;
    }

    public function sql_query($sql)
    {
    $connection = $this->_connections[$this->connection_index];
    var_dump($this->_connections[$this->connection_index]);
    return $connection->sql_query($sql);
    }

    public function connect($database, $sqlserver, $sqluser, $sqlpassword, $persistency)
    {

    $this->persistency = $persistency;
    $this->user = $sqluser;
    $this->password = $sqlpassword;
    $this->server = $sqlserver;
    $this->dbname = $database;

    if($this->persistency)
    {
    $this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
    }
    else
    {
    $this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
    }
    if($this->db_connect_id)
    {
    if($database != "")
    {
    $this->dbname = $database;
    $dbselect = @mysql_select_db($this->dbname);
    if(!$dbselect)
    {
    @mysql_close($this->db_connect_id);
    $this->db_connect_id = $dbselect;
    }
    }
    return $this->db_connect_id;
    }
    else
    {
    return false;
    }

    }


    //
    // Other base methods
    //
    function disconnect()
    {
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_disconnect();
    }


    //
    // Other query methods
    //
    function sql_numrows($query_id = 0)
    {
    $connection = $this->_connections[$this->connection_index];
    return $connection->sql_numrows();
    }
    function sql_affectedrows()
    {
    $connection = $this->_connections[$this->connection_index];
    return $connection->sql_affectedrows();
    }
    function sql_numfields($query_id = 0)
    {
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_numfields();
    }
    function sql_fieldname($offset, $query_id = 0)
    {
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_fieldname($offset);
    }
    function sql_fieldtype($offset, $query_id = 0)
    {
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_fieldtype($offset);
    }
    function sql_fetchrow($query_id = 0)
    {
    $connection = $this->_connections[$this->connection_index];
    return $connection->sql_fetchrow($query_id);
    }

    function sql_fetchrowset($query_id = 0)
    {
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_fetchrowset();
    }
    function sql_fetchfield($field, $rownum = -1, $query_id = 0)
    {
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_fetchfield($field, $rownum);
    }
    function sql_rowseek($rownum, $query_id = 0){
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_rowseek($rownum);
    }
    function sql_nextid(){
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_nextid();
    }
    function sql_freeresult($query_id = 0){
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_freeresult();
    }
    function sql_error($query_id = 0)
    {
    $connection = $this->_connections[$this->connection_index];
    $connection->sql_error();
    }

  2. #2

    نقل قول: اتصال به چند دیتابیس بصورت همزمان

    همه‌ی توابع *_mysql یک پارامتر اختیاری به عنوان اتصال دارند که وقتی مشخص نشه، از اتصال موجود استفاده میکنه و این دقیقا مشکل شماست. شما باید this->db_connect_id رو به همه‌ی توابع mysql اضافه کنید.
    در ضمن این کلاسها به هیچ‌وجه بهینه نیستند!

  3. #3
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    محل زندگی
    Tehran
    پست
    29

    نقل قول: اتصال به چند دیتابیس بصورت همزمان

    نقل قول نوشته شده توسط امیـرحسین مشاهده تاپیک
    همه‌ی توابع *_mysql یک پارامتر اختیاری به عنوان اتصال دارند که وقتی مشخص نشه، از اتصال موجود استفاده میکنه و این دقیقا مشکل شماست. شما باید this->db_connect_id رو به همه‌ی توابع mysql اضافه کنید.
    ممنون از راهنماییتون. اما من دقیقا متوجه نشدم که پارامتر this->db_connect_id رو به کدوم توابع باید اضافه کنم؟ توابع کلاس Connection که همگی از این پارامتر استفاده میکنند. اگر امکان داره یه قسمت از کد رو برام اصلاح کنید.

  4. #4

    نقل قول: اتصال به چند دیتابیس بصورت همزمان

    مثلا شما که تابع mysql_fetch_array که استفاده کردید، کلاس بیچاره از کجا باید بفهمه که با کدوم کانکشن کار کنه؟ پارامترهای دیگه‌ی این تابع رو چک بفرمایید میبینید که کانکشن رو هم قبول میکنه. شما لینک کانکشن رو در db_connect_id ذخیره میکنید. اون رو به عنوان لینک به توابع mysql بدید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •