Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho uma tabela de usuários e outra de grupos na minha aplicação, ambas estão num banco postgres e utilizo arquivos php para conectá-las. Cada usuário pode pertencer a diversos grupos, adiciono novo usuário entretanto quando vou indicar qual grupo aquele usuário pertence aparece o seguinte erro:
faultCode:Client.Error.DeliveryInDoubt faultString:'Canal desconectado' faultDetail:'Canal desconectado antes do recebimento da confirmação'
Como posso corrigir?
>
post seu código e remova os dados pessoais e coloque ficticios.
em qual arquivo dar erro, deixe sua mensagem com o código para assim analizar-mos e ajuda-lo.
<?php
ini_set("display_errors", 1);
ini_set("error_reporting", 1);
require_once 'Connect.php';
require_once("FieldsTypes.php");
class DataBaseService extends Connect
{
public function __construct()
{
parent::__construct();
}
/**
*Retorna todos os registros de uma tabela
*@param $table Nome da tabela
*/
public function selectAll($table)
{
//$table=strtoupper($table);
if(empty($this->conn))
$this->connect();
$select = $this->conn->select()
->from($table);
$stmt=$this->conn->query($select);
$result = $stmt->fetchAll();
//$this->logMe($result,"result");
return $result;
}
/**
* Retorna todos os dados distintos de uma determinada tabela e campo.
* @param $table Tabela utilizada na consulta
* @param $field Campo data tabela distinto a ser pesquisado
* @param $where Condição a ser aplicada na consulta
* @param $arrLmtStr Array contendo as posições start e limit
* @param $order Determina se é para ordenar o resultado pelo campo distinto
*/
public function getDistinctData($table,$field,$where,$arrLmtStr,$order=true)
{
try{
$this->conn->query("SET SEARCH_PATH='".$this->default_schema_sde."'");
//$table=strtoupper($table);
if(empty($this->conn))
$this->connect();
if(!($this->getcache("distinct$table$field"))){
//Registros distintos
$select=$this->conn->select()
->from($table,$field)
->distinct();
if ($where!="")
$select->where($where);
if ($order)
$select->order($field);
$this->conn->getProfiler()->setEnabled(true);
$stmt=$this->conn->query($select);
$query = $this->conn->getProfiler()->getLastQueryProfile()->getQuery();
$distintos = $stmt->fetchAll();
$this->setcache("distinct$table$field", $distintos);
}else{
//echo "distinct$table$field" ;
$distintos = $this->getcache("distinct$table$field");
}
//$this->logMe('SQL'. "\n".$query. "\n");
$this->conn->getProfiler()->setEnabled(false);
$result = array($field,$distintos);
$this->conn->query("SET SEARCH_PATH='".$this->default_schema."'");
//$this->logMe($result,"result");
return $result;
} catch (Exception $e) {
$this->logMe('Error: (getDistinctData) '.$this->getIP(). "\n" .$e->getMessage(). "\n");
$this->logMe('Parametros:'."\n"."table:$table"."\n"."field:$field"."\n"."where:$where"."\n"."arrLmtStr:$arrLmtStr"."\n"."order:$order". "\n");
$this->logMe('Result'. "\n".$result. "\n");
return 'Error: '. $e->getMessage();
}
}
/**
*
* Retorna os campos e tipos de uma determinada tabela
*
* @param $table Tabela
* @param $schema Schema a ser pesquisado
*/
public function getFieldsTable($table,$schema="")
{
//$table=strtoupper($table);
if ($schema =="")
$schema=$this->default_schema;
$desc=$this->conn->describeTable($table,$schema);
//$this->logMe($desc,"desc");
$result=array();
foreach($desc as $row){
//$this->logMe($this->default_schema,"row");
if ($schema==$row["SCHEMA_NAME"])
array_push($result,array("coluna"=>$row["COLUMN_NAME"],"tipo"=>$this->getEsriType($row["DATA_TYPE"])));
}
return $result;
}
/**
* Retorna o tipo do dado conforme os padrões da ESRI
* @param $type Tipo do dado no banco de dados
*/
public function getEsriType($type){
$type=strtolower($type);
$return = $type;
switch ($type) {
case 'integer':
case 'smallint':
case 'int':
case 'int2':
case 'int3':
case 'int4':
case 'float':
case 'double':
case 'number':
case 'bigint':
case 'number':
$return = FieldsTypes::$TYPE_NUMERIC;
break;
case 'character varying':
case 'varchar':
case 'nvarchar2':
case 'string':
$return = FieldsTypes::$TYPE_STRING;
break;
case 'USER-DEFINED':
case 'shape':
case 'sdo_geometry':
case 'blob':
$return = FieldsTypes::$TYPE_GEOMETRY;
break;
case 'timestamp without time zone':
case 'date':
case 'datetime':
case 'timestamp':
case 'time':
case 'datetime':
$return = FieldsTypes::$TYPE_DATE;
break;
}
return $return;
}
/**
*
* Retorna os campos para montagem de select
*
* @param $table Tabela
* @param $excludedType Tipo de dado que nao sera retornado
* @param $schema Schema a ser pesquisado
*/
public function getFieldsToSelect($table,$excludedType="ST_GEOMETRY",$schema="")
{
$campos=$this->getFieldsTable($table,$schema);
$fields=array();
foreach($campos as $k=>$v){
if ($v["tipo"]!=$excludedType)
array_push($fields,$v["coluna"]);
}
$fields = implode(",",$fields);
return $fields;
}
/**
*
* Realiza uma busca em uma tabela e retorna seus registros
* @param $table Tabela que será realizado a busca
* @param $where Condição a ser aplicada na busca.
* @param $order Campo de ordenação dos resultados.
* @param $limit Limite de resultados
*/
public function getData($table, $where = '',$order = '', $limit = '')
{
try{
if(empty($this->conn))
$this->connect();
$fields = $this->getFieldsToSelect($table,FieldsTypes::$TYPE_GEOMETRY);
$this->conn->getProfiler()->setEnabled(true);
$select = $this->conn->select()
->from($table,$fields);
if ($where!='')
$select->where($where);
if($order != '')
$select->order($order);
if($limit != '')
$select->limit($limit);
$rs = $this->conn->query($select);
$sql = $this->conn->getProfiler()->getLastQueryProfile()->getQuery();
//$this->logMe($sql,'Sql');
$queryResult = $rs->fetchAll();
$result = array(count($queryResult),$queryResult);
return $result;
} catch (Exception $e) {
$this->logMe('Error: (getData) '.$this->getIP(). "\n" .$e->getMessage(). "\n");
$this->logMe('Result:'. "\n".$queryResult. "\n");
return 'Error: '. $e->getMessage();
}
}
/**
*
* Realiza a conversao de um objeto para um array
* @param $object Objeto a ser convertido
*/
public function objectToArray ($object) {
if( !is_object( $object ) && !is_array( $object ) )
{
return $object;
}
if( is_object( $object ) )
{
$object = get_object_vars( $object );
}
//$this->logMe($object,"arr");
return $object ;
}
/**
*
* Realiza a conversao de um array para um objeto
* @param $array Array a ser convertido
*/
public function arrayToObject($array)
{
$object = new stdClass();
if (is_array($array) && count($array) > 0)
{
foreach ($array as $name=>$value)
{
$name = strtolower(trim($name));
if (!empty($name))
{
$object->$name = $value;
}
}
}
return $object;
}
/**
*
* Realiza o update em uma tabela
* @param $table Tabela que será realizado o update
* @param $data Objeto contendo os atributos e valores que serão atualizados.
* @param $where Condição a ser aplicada no update.
* @param $token Token do usuário autenticado
*/
public function update($table,$data,$where,$token)
{
//$table=strtoupper($table);
if(empty($this->conn))
$this->connect();
try
{
//$this->logMe($token,"token update");
$this->verifyToken($token);
if (is_object($data)){
$data=$this->objectToArray($data);
}
$update = $this->conn->update($table, $data, $where);
if ($update)
$this->cleanCache();
return array('status'=>true,'message'=>$update);
} catch (Exception $e) {
$this->logMe('Error: (update) '. $this->getIP(). "\n" .$e->getMessage(). "\n");
$this->logMe('Result:'. "\n".$update. "\n");
return 'Error: '. $e->getMessage();
return array('status'=>false,'message'=>'Erro. Não foi possível realizar a alteração');
}
}
/**
*
* Realiza o insert em uma tabela
* @param $table Tabela que será realizado o insert
* @param $data Objeto contendo os atributos e valores que serão inseridos.
*/
public function insert($table,$data)
{
//$table=strtoupper($table);
if(empty($this->conn))
$this->connect();
try
{
if (is_object($data)){
$data=$this->objectToArray($data);
}
//$this->logMe($table,"table");
//$this->logMe($data,"data");
$insert = $this->conn->insert($table, $data);
if ($insert)
$this->cleanCache();
//$this->logMe($insert,"insert");
return $insert;
} catch (Exception $e) {
$this->logMe('Error: '. "\n" .$e->getMessage(). "\n");
$this->logMe('Result:'. "\n".$insert. "\n");
return 'Error: '. $e->getMessage();
}
}
/**
*
* Realiza a exclusao em uma tabela
* @param $table Tabela que será realizada exclusao
* @param $where Condição para exclusão
*/
public function remove($table,$where)
{
try
{
//$table=strtoupper($table);
if(empty($this->conn))
$this->connect();
$remove = $this->conn->delete($table, $where);
if ($remove)
$this->cleanCache();
return $remove;
}
catch(Exception $e)
{
$this->logMe('Error: '. "\n" .$e->getMessage(). "\n");
return 'Error: '. $e->getMessage();
}
}
public function logMe($var,$label="") {
if ($this->debug==true){
$filename = sys_get_temp_dir() .'\__log.txt';
if (!$handle = fopen($filename, 'a')) {
echo "Cannot open file ($filename)";
return;
}
$toSave = print_r($var, true);
fwrite($handle, "[" . date("y-m-d H:i:s:u") . "]".$label);
fwrite($handle, "\n");
fwrite($handle, $toSave);
fwrite($handle, "\n");
fclose($handle);
}
}
}
post seu código e remova os dados pessoais e coloque ficticios.
em qual arquivo dar erro, deixe sua mensagem com o código para assim analizar-mos e ajuda-lo.