Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
PHP DataSnap + Rest Client (EVA - PHP İstemcisi) - 002 - İstemci Uygulaması
#1
Merhabalar,

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol konusunun devamı niteliğinde olan bu konuda PHP ile 1. konuda bahsettiğim sunucudan sorgulama ve CRUD işlemlerinin nasıl gerçekleşeceğini anlatacağım. "Evrensel Veri Adaptörü  - PHP İstemcisi" olarak nitelendiriyorum ben. 

Daha önce de belirttiğim gibi, bağlanmakta zorluk çektiğiniz, direkt dışarı açmak istemediğiniz veri tabanlarına bağlanmak için kullanabileceğiniz bir yapı. 

Öncelikli olarak PHP tarafında cURL' ün aktif olması gerekmekte.

Burada Query ve Execute olarak iki metodumuz mevcut. Bu metodları  aşağıda anlatacağım sınıflarda rahat kullanacağınız hale getirdim. 

Şimdi gelelim PHP dosyalarımıza...

dbHelper_DataSnap.php içeriği;

PHP Kod:
<?php

class dbHelper_DataSnap {

 
   private $ds_db_type '';
 
   private $ds_db_host '';
 
   private $ds_db_port 0;
 
   private $ds_db_database '';
 
   private $ds_db_user '';
 
   private $ds_db_password '';
 
   private $ds_db_additional_specs '';

 
   private $data_snap_server '';
 
   private $data_snap_port 0;
 
   private $data_snap_protocol '';
 
   private $data_snap_user '';
 
   private $data_snap_password '';

 
   public function __construct($db_type$host$port$database$user$password$additional_specs$ds_server$ds_port$ds_protocol$ds_user$ds_password)
 
   {
 
       $this->ds_db_type $db_type;
 
       $this->ds_db_host $host;
 
       $this->ds_db_port $port;
 
       $this->ds_db_database $database;
 
       $this->ds_db_user $user;
 
       $this->ds_db_password $password;
 
       $this->ds_db_additional_specs $additional_specs;

 
       $this->data_snap_server $ds_server;
 
       $this->data_snap_port $ds_port;
 
       $this->data_snap_protocol $ds_protocol;
 
       $this->data_snap_user $ds_user;
 
       $this->data_snap_password $ds_password;
 
   }

 
   public function query($sql$params = array())
 
   {
 
       $sql Tool::CRUDControl($sql);

 
       $connection_info = new stdClass();
 
       $connection_info->db_type $this->ds_db_type;
 
       $connection_info->host $this->ds_db_host;
 
       $connection_info->port $this->ds_db_port;
 
       $connection_info->database $this->ds_db_database;
 
       $connection_info->user $this->ds_db_user;
 
       $connection_info->password $this->ds_db_password;
 
       $connection_info->additional_specs $this->ds_db_additional_specs;

 
       $query_info = new stdClass();
 
       $query_info->query $sql;
 
       $query_info->params $params;

 
       $all_parameters = new stdClass();
 
       $all_parameters->connection_info $connection_info;
 
       $all_parameters->query_info $query_info;
 
       $all_parameters->type 'Q';

 
           $base_url = ($this->data_snap_protocol == 'H' 'http://' 'https://') . $this->data_snap_server ':' $this->data_snap_port '/madds/rest/TServerMethods/%22Query%22';

 
       $ret Tool::callServiceWithPostParametersDataSnap($base_urljson_encode($all_parameters), $this->data_snap_user$this->data_snap_password);

 
       if ($ret->data == null) {
 
           $ret->data = array();
 
       }

 
       return $ret->data;
 
   }

 
   public function exec($sql$params = array())
 
   {
 
       $sql Tool::CRUDControl2($sql);
 
       $sql Tool::QueryControl($sql);

 
       $connection_info = new stdClass();
 
       $connection_info->db_type $this->ds_db_type;
 
       $connection_info->host $this->ds_db_host;
 
       $connection_info->port $this->ds_db_port;
 
       $connection_info->database $this->ds_db_database;
 
       $connection_info->user $this->ds_db_user;
 
       $connection_info->password $this->ds_db_password;
 
       $connection_info->additional_specs $this->ds_db_additional_specs;

 
       $query_info = new stdClass();
 
       $query_info->query $sql;
 
       $query_info->params $params;

 
       $all_parameters = new stdClass();
 
       $all_parameters->connection_info $connection_info;
 
       $all_parameters->query_info $query_info;
 
       $all_parameters->type 'E';

 
       $base_url = ($this->data_snap_protocol == 'H' 'http://' 'https://') . $this->data_snap_server ':' $this->data_snap_port '/madds/rest/TServerMethods/%22Execute%22';

 
       $ret Tool::callServiceWithPostParametersDataSnap($base_urljson_encode($all_parameters), $this->data_snap_user$this->data_snap_password);

 
       return $ret;
 
   }



dbHelper isminden de anlaşılacağı üzere veri tabanına bağlantı ve sorgulama için kullanacağımız metodları içeren sınıf.


Tool.php içeriği;

PHP Kod:
<?php

require_once 'dbHelper_DataSnap.php';

class 
Tool
{
 
   public static function callServiceWithPostParametersDataSnap($url$parameters$user$password$returns_json true){
 
       $ch curl_init('');
 
       curl_setopt($chCURLOPT_URL$url);
 
       curl_setopt($chCURLOPT_CUSTOMREQUEST"POST");
 
       curl_setopt($chCURLOPT_POSTFIELDS$parameters);
 
       curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
 
       curl_setopt($chCURLOPT_TIMEOUT'500');
 
       curl_setopt($chCURLOPT_USERPWD"$user:$password");
 
       curl_setopt($chCURLOPT_HTTPHEADER, array(
 
               'Content-Type: application/json',
 
               'Content-Length: ' strlen($parameters))
 
       );
 
       try {
 
           $result curl_exec($ch);
 
           // self::AddDebugLog($result,'DataSnap - Curl - Success');
 
       } catch (Exception $e) {
 
           // self::AddDebugLog($e->getMessage(),'DataSnap - Curl - Error');
 
       }
 
       curl_close($ch);
 
       if ($returns_json) {
 
           return json_decode($result);
 
       } else {
 
           return $result;
 
       }
 
   }

 
   public static function CRUDControl($str) {
 
       $rejected = array('CREATE''ALTER''DROP''TRUNCATE''INSERT''UPDATE''DELETE',
 
           'create''alter''drop''truncate''insert''update''delete');
 
       foreach ($rejected AS $r) {
 
           $str str_replace($r,'',$str);
 
       }
 
       return $str;
 
   }

 
   public static function CRUDControl2($str) {
 
       $rejected = array('CREATE''ALTER''DROP''TRUNCATE',
 
           'create''alter''drop''truncate');
 
       foreach ($rejected AS $r) {
 
           $str str_replace($r,'',$str);
 
       }
 
       return $str;
 
   }

 
   public static function QueryControl($str)
 
   {
 
       $rejected = array('*');
 
       foreach ($rejected AS $r) {
 
           $str str_replace($r''$str);
 
       }
 
       return $str;
 
   }

 
   public static function GetRemoteConnection() {
 
       $conn null;

 
       try {
 
           $conn = new dbHelper_DataSnap 'PostgreSQL',
 
                                           'localhost',
 
                                           5433,
 
                                           'delphican_db',
 
                                           'delphican',
 
                                           '123',
 
                                           '',
 
                                           'dış ip adresiniz',
 
                                           1234,
 
                                           'H',
 
                                           'admin',
 
                                           'abc'
 
           ); // Burada bağlantı bilgilerini set ediyoruz.
 
       } catch (Exception $e) {
 
           $conn null;
 
           unset($conn);
 
           return null;
 
       }

 
       return $conn;
 
   }

}

?>

Tool.php, bazı yardımcı fonksiyonları barındıran araçlar sınıfı.

Sync_Model.php içeriği;

PHP Kod:
<?php

require_once 'Tool.php';
require_once 
'dbHelper_DataSnap.php';

class 
Sync_Model
{
 
   private $datasnap null;

 
   function __construct()
 
   {
 
       $this->datasnap Tool::GetRemoteConnection(); // Burada bağlantıyı alıyor gibi yapıyor ama almıyoruz. Set ediyoruz...
 
   }

 
   function __destruct()
 
   {
 
       unset($datasnap);
 
   }

 
   public function testQuery1() {
 
       $qry $this->datasnap->query("SELECT * FROM test ORDER BY id");

 
       return $qry;
 
   }

 
   public function testQuery2() {
 
       $qry $this->datasnap->query("SELECT * FROM test where ad = :param1",
 
           array(
 
               'param1'=>'aaa'
 
           )
 
       );

 
       return $qry;
 
   }

 
   public function testExec() {
 
       $exc $this->datasnap->exec("UPDATE test SET ad = :param1 where id = :param2",
 
           array(
 
               'param1'=>'xyz',
 
               'param2'=>2
            
)
 
       );

 
       return $exc;
 
   }
}

?>

Sync_Model.php, veri tabanı işlemlerinin yapıldığı, model sınıfı.


Sync_Controller.php içeriği;

PHP Kod:
<?php

require_once 'Sync_Model.php';

error_reporting(E_ALL);
ini_set('display_errors'1);

class 
Sync_Controller
{
 
   public function testQueries() {
 
       $model = new Sync_Model(); // Model sınıfımızdan bir tane oluşturduk.
 
       echo 'testQuery1 ->' json_encode($model->testQuery1()); // Uzak sunucuda sorgumuzu çalıştırdık (query) ve sonucu json olarak ekrana bastık.
 
       echo '<br/><br/><br/>';
 
       echo 'testQuery2 ->' json_encode($model->testQuery2()); // Uzak sunucuda sorgumuzu çalıştırdık (query) ve sonucu json olarak ekrana bastık.
 
       echo '<br/><br/><br/>';
 
       echo json_encode($model->testExec()); // Uzak sunucuda sorgumuzu çalıştırdık (execute) ve sonucu json olarak ekrana bastık.
 
       unset($model);
 
   }
}

$c = new Sync_Controller();
$c->testQueries();

?>
Sync_Controller, Controller sınıfıdır. Veri tabanı sorgularını, vs barındırmaz. Model sınıfını kullanarak yapar gerekli veri tabanı işlemlerini.

Faydalı olacağını umuyorum...
Cevapla
#2
Merhaba,

Fikrinize sağlık, Bu kodlar PHP'nin hangi versiyonunda yazıldı? Spesifik olarak en düşük versiyon hangisi?
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#3
(20-11-2017, Saat: 14:18)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,

Fikrinize sağlık, Bu kodlar PHP'nin hangi versiyonunda yazıldı? Spesifik olarak en düşük versiyon hangisi?

Ben PHP 7 kullanıyorum. Bu kodlar PHP "5.3.0" ve üstünde sorun çıkarmaz ("namespace" kullanımından ötürü. "5.3.0" sürümünde kullanılmaya başlandı...).
Cevapla
#4
Merhaba,

"namespace" kullanımını kaldırdım. Yine söylediğim gibi 5.3 ve üstü sürümlerde sorun olmayacaktır.
Cevapla
#5
Php 7 de çogu sorun giderilmiş durumda
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  EVA Sunucu ve İstemci Uygulaması Test ve Örnek Ekranlar - 003 mad85 0 259 10-12-2017, Saat: 02:11
Son Yorum: mad85
  Datasnap + Rest Server -> Evrensel Veri Adaptörü - 001 - Sunucu Uygulaması mad85 7 809 17-11-2017, Saat: 22:56
Son Yorum: mad85



Konuyu Okuyanlar: 1 Ziyaretçi