henbran
(usa Debian)
Enviado em 08/10/2009 - 10:00h
BOM DIA.
Tenho a ousadia de tentar uma flexibilização de código p/ uma consulta também flexivel, onde verifica se uma variável recordset é uma matriz, e se for, verifica a quantidade de ponteiros, set o primeiro ponteiro e procede uma extração p/ uma outra variável que concatena com tags XML.
A idéia de estrutura é assim:
1) Consulta (pelo recurso PDO);
2) Verifica se o resulta é uma Array (matriz)
3) Se for uma Array (matriz), vai p/ uma function que extrai a matriz, concatenando o valor a uma variável assim:
foreach($array as $value_linha_atual){
var_xml .= "<$key_linha_atual> $value_linha_atual> </$key_linha_atual>;
}
//++++++++++++++++++++++++++ PESQUISAR ++++++++++++++++++++++++++
function pesquisar($db){
$con = conectar($db); // Faz a conexão PDO (testado em MySql e em Oracle), se quiser eu posto o script
if ($con) // se conexão foi com êxito?
{ try
{
$sql = prepara_sql($db); //manda uma matriz ($db) com ponteiros Nome_Da_Tabela,
// Campos_De_Pesquisa, Condições_Where, etc...
$res=$con->prepare($sql, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
$res->execute();
// percorrer a matriz até o fim dela
foreach ($res as $row)
{// se $row também for matriz , função matriz
if ($row=="Array") // Se a var $row ainda for uma Array
{$valor .= extrair_Matriz($row) // aciona a function extrair_Matriz($row)}
}
$linha .= "<linha>$valor</linha>";
$retorno .= "<reg> $linha </reg>"; // define a raiz da variável XML
$retorno = "<?xml version=\"1.0\" ?> $retorno";
header("Content-type: application/xml");
echo $retorno;
}
//++++++++++++++++++++++++++ PREPARA DADOS P/ A PESQUISA ++++++++++++++++++++++++++
function prepara_sql($db){
//Não tirar dessa ordem
$sql .= "SELECT ".$db[campos]." FROM ".$db[tab];
if ($db[join]) {$sql .= " INNER JOIN ".$db[join];}
if ($db[cond]) {$sql .= " WHERE ".$db[cond];}
if ($db[ord]) {$sql .= " ORDER BY ".$db[ord];}
return $sql;}
function extrair_Matriz($m){
//$p =0;$lim =0;
foreach ($m as $k=>$col){
// if (($p%2)==0)
$result .= "<$k>$col</$k>";
//$p++;
}
return $result;
}
catch (Exception $e)
{
$retorno = "Erro: Código: " . $e->getCode() . "Mensagem " . $e->getMessage();
$con=null;
return $retorno;
}
}
else
{
return false;
}
}
POR FAVOR, ESTE CÓDIGO ESTÁ UMA ALGAZARRA. Eu só preciso extrair uma variável PDO que tem formas diferentes uma uma extração de uma variável resultset p/ MySql. Algo mais relevante que um simples print_r.
Uma forma de mover p/ o próximo cursor da matriz. Saber qual o cursor atual. Até quase consegui, porém tinha que colocar um break, pois com uma function p/ extrair matriz (array) multidimencional, gerava na array de 2ª ou 3ª dimensão, um LOOP INFINITO.
Realmente, esse interesse todo em recursos PDO tem um legítimo e ótimo objetivo: Abstração de banco de dados.