1. Ana Sayfa
  2. PHP

Wordpress Multi Database PHP

Wordpress Multi Database PHP
Wordpress Multi Database PHP kapak fotosu
+ - 0

Merhaba, bu yazımda Wordpress Multi Database PHP konusunda bakacağız. Hazırladığım bir projede, wordpress sitesinde çoklu veri tabanı kullanmam gerekiyordu. Bazı işlemlerin sonuçlarıın farklı bir veritabanına yazılması gerekiyordu. Bu yüzden bu işlem lazım oldu.

Başlamadan önce Discord sunucuma katılmayı unutmayın. :D

Wordpress Multi Database PHP

Wordpress’te bazı işlem sonuçlarını farklı bir veri tabanına yazmak ve oradan okumak hakkında bir işleme ihtiyaç duydum. Bu yüzden wordpress’e ikinci bir veritabanı ekleme hakkında araştırmalar yaptım. Ama bulamadım. Evet. Bulamadım.

Ama bu, beni engellemedi tabi ki. Wordpress multi db desteği yok ama biz ekstra kodlarla bunu sağlayabiliyoruz.

Bunun için kullanacağımız bir php dosyası var. Bu dosya için codeshack’a teşekkürler. :D Kodları o siteden aldım. Şimdi size kodları vereyim.

<?php
class db_custom {
    protected $connection;
    protected $query;
    protected $show_errors = TRUE;
    protected $query_closed = TRUE;
	public $query_count = 0;

	public function __construct(
	    $dbhost = 'localhost', 
	    $dbuser = 'dijit104_do_crm_user', 
	    $dbpass = '?6?X!)BV4w(3', 
	    $dbname = 'dijit104_do_crm', 
	    $charset = 'utf8'
	    ) 
	    {
		$this->connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
		if ($this->connection->connect_error) {
			$this->error('Failed to connect to MySQL - ' . $this->connection->connect_error);
		}
		$this->connection->set_charset($charset);
	}

    public function query($query) {
        if (!$this->query_closed) {
            $this->query->close();
        }
		if ($this->query = $this->connection->prepare($query)) {
            if (func_num_args() > 1) {
                $x = func_get_args();
                $args = array_slice($x, 1);
				$types = '';
                $args_ref = array();
                foreach ($args as $k => &$arg) {
					if (is_array($args[$k])) {
						foreach ($args[$k] as $j => &$a) {
							$types .= $this->_gettype($args[$k][$j]);
							$args_ref[] = &$a;
						}
					} else {
	                	$types .= $this->_gettype($args[$k]);
	                    $args_ref[] = &$arg;
					}
                }
				array_unshift($args_ref, $types);
                call_user_func_array(array($this->query, 'bind_param'), $args_ref);
            }
            $this->query->execute();
           	if ($this->query->errno) {
				$this->error('Unable to process MySQL query (check your params) - ' . $this->query->error);
           	}
            $this->query_closed = FALSE;
			$this->query_count++;
        } else {
            $this->error('Unable to prepare MySQL statement (check your syntax) - ' . $this->connection->error);
        }
		return $this;
    }

	public function fetchAll($callback = null) {
	    $params = array();
        $row = array();
	    $meta = $this->query->result_metadata();
	    while ($field = $meta->fetch_field()) {
	        $params[] = &$row[$field->name];
	    }
	    call_user_func_array(array($this->query, 'bind_result'), $params);
        $result = array();
        while ($this->query->fetch()) {
            $r = array();
            foreach ($row as $key => $val) {
                $r[$key] = $val;
            }
            if ($callback != null && is_callable($callback)) {
                $value = call_user_func($callback, $r);
                if ($value == 'break') break;
            } else {
                $result[] = $r;
            }
        }
        $this->query->close();
        $this->query_closed = TRUE;
		return $result;
	}

	public function fetchArray() {
	    $params = array();
        $row = array();
	    $meta = $this->query->result_metadata();
	    while ($field = $meta->fetch_field()) {
	        $params[] = &$row[$field->name];
	    }
	    call_user_func_array(array($this->query, 'bind_result'), $params);
        $result = array();
		while ($this->query->fetch()) {
			foreach ($row as $key => $val) {
				$result[$key] = $val;
			}
		}
        $this->query->close();
        $this->query_closed = TRUE;
		return $result;
	}

	public function close() {
		return $this->connection->close();
	}

    public function numRows() {
		$this->query->store_result();
		return $this->query->num_rows;
	}

	public function affectedRows() {
		return $this->query->affected_rows;
	}

    public function lastInsertID() {
    	return $this->connection->insert_id;
    }

    public function error($error) {
        if ($this->show_errors) {
            exit($error);
        }
    }

	private function _gettype($var) {
	    if (is_string($var)) return 's';
	    if (is_float($var)) return 'd';
	    if (is_int($var)) return 'i';
	    return 'b';
	}

}
?>

Yukarıdaki kodların hepsini alın ve db.php adlı bir dosyaya yapıştırın. Sonra bu dosyayı tema dosyalarınızın içine atın. Tam olarak temanızın function.php adlı dosyası ile aynı dizinde olmalı. Eğer farklı dizine koyarsanız, dosyayı koyduğunuz yolu aklınızda tutun.

Şimdi temamızın funciton.php dosyasında bu sınııfı nasıl kullanabilirsiniz ona bakalım.

NOT: Burada wordpress içinde nasıl bir işlem yapacağınızı bilmiyorum. Wordpress’e ekstra bir işlem eklemek için add_action() diye bir metot kullanılıyor. O konulara pek hakim değilim. O yüzden o kısmı sizin halletmeniz gerekiyor. Bu sebeple ben örmek bir kullanım yaparak anlacağım. add_action() metodu hakkında daha fazla bilgiyi bağlantıya giderek bulabilirsiniz.

Şimdi sınıfımızı kullanalım. Ben burada add_action() metodunu kullanmayacağım. Sadece yukarıdaki sınıfı nasıl kullanacağınızı anlatacağım.

    $dbhost = 'localhost'; 
    $dbuser = 'DATABASE_KULLANICI_ADI';
    $dbpass = 'DATABASE_SIFRE'; 
    $dbname = 'DATABASE_ADI'; 
    require_once('/home/hosting_kullanici_on_ekiniz/db.php');	

    $db_watch = new db_custom($dbhost, $dbuser, $dbpass, $dbname); 		
    /*db_custom, db.php dosyasındaki sınıfımız oluyor.*/

    $db_watch->query(
     " INSERT INTO table_name (column1, column2, column3) VALUES 
	(
	  '". $value1 ."'
	, '". $value2 ."'
	, '". $value3 ."'
	)" );

Başka bir tabloya nasıl INSERT yaptığımızı yukarıda görüyorsunuz. Not kısmında da dediğim gibi burada işlem yapılacak verileri nasıl alacağınızı bilemem. Bir şekilde aldınız diyelim. Dataları INSERT alanında kullanırsınız.

Tamamdır. Şuan başka bir veri tabanına kayıt yapmayı başardınız. Yukarıda verdiğim codeshack linkine giderseniz daha fazla açıklama bulabilirsiniz.

Başka veri tabanına yazma olayını sonraki yazılarımda daha detaylı bulabilirsiniz. Bu yazımda sınıfı nasıl kullanacağınızı gösterdim. Bağlantıdaki yazımda kodları iş üstünde görebileceksiniz.

 


Wordpress Multi Database PHP yazımda bu kadardı arkadaşlar. Diğer yazılarda görüşmek üzere…

PHP Dersleri için başlattığım repoya bağlantıya tıklayarak ulaşabilirsiniz. Tüm PHP yazılarım için tıklayabilirsiniz.

Discord sunucuma katılmayı unutmayın. :D

Kodla kalın. :)

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)