Merhabalar,
"Datasnap + Rest Server -> Evrensel Veri Adaptörü - 001 - Sunucu Uygulaması" 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;
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;
Tool.php, bazı yardımcı fonksiyonları barındıran araçlar sınıfı.
Sync_Model.php içeriği;
Sync_Model.php, veri tabanı işlemlerinin yapıldığı, model sınıfı.
Sync_Controller.php içeriği;
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...
"Datasnap + Rest Server -> Evrensel Veri Adaptörü - 001 - Sunucu Uygulaması" 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: (Select All)
<?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_url, json_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_url, json_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: (Select All)
<?php
require_once 'dbHelper_DataSnap.php';
class Tool
{
public static function callServiceWithPostParametersDataSnap($url, $parameters, $user, $password, $returns_json = true){
$ch = curl_init('');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, '500');
curl_setopt($ch, CURLOPT_USERPWD, "$user:$password");
curl_setopt($ch, CURLOPT_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: (Select All)
<?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: (Select All)
<?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();
?>Faydalı olacağını umuyorum...

