henbran
(usa Debian)
Enviado em 07/10/2010 - 18:52h
Montei e trabalho com uma estrutura de conexão e execução de sql's, usando os recursos da PDO (1 espécie de recurso de abstração de banco de dados onde vc pode mudar de banco de dados sem se preocupar com os códigos php). Uma mão na roda, amigo.
Procure sempre que possivel separar HTML do PHP.
Teste sempre tuas strings SQL no banco (pelo mysqlAdmin, ou phpmyadmin).
Tente rever teus conceitos de desenvolvimento, talvez seja momento de você pensar em AJAX.
Precisando, pode nos procurar aqui. As tuas dúvidas ajudará a muitos leigos e expertos em dificuldades diversas.
-----------------------------------
CONEXÃO AO BD: salve como Banco.php
<?php
class Banco {
public $con;
public $msg;
private $dC;
private $tipo = "mysql";
private $host = "localhost";
private $bd = "nomeDoBancoDeDados";
private $user = "usuarioDoBD";
private $pass = "senhaDoBD";
public function conectar() {
$this->tipoBd();
if ($this->con) {
try {
$this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
$this->msg = "Erro de conexão com o banco de dados: Código: " . $e->getCode() . "Mensagem " . $e->getMessage() . "hora: " . date('H:i:s');
}
} else {
echo "Erro na definição PDO do banco de dados!";
exit;
}
}
private function tipoBd() {
try {
switch ($this->tipo) {
case 'mysql':
try {
$this->con = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->bd, $this->user, $this->pass);
} catch (Exception $exc) {
$this->msg = "Erro de coneção com o banco de dados MySql. " . $exc->getTraceAsString();
}
break;
case 'pgsql':
$this->con = new PDO("pgsql:dbname={" . $this->bd . "};user={" . $this->user . "}; password={" . $this->pass . "};host=" . $this->host);
break;
case 'oci8':
$tns = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" . $this->host . ")(PORT=1521)))(CONNECT_DATA=(SID=" . $this->bd . ")))";
$this->con = new PDO("oci:dbname=" . $tns, $this->user, $this->pass, array(PDO::ATTR_PERSISTENT => true));
break;
case 'mssql':
$this->con = new PDO("mssql:host={" . $this->host . "},1433;dbname={" . $this->bd . "}", $this->user, $this->pass);
break;
}
} catch (Exception $exc) {
echo $exc->getTraceAsString();
exit;
}
}
}
?>
//////////////////////////////
arquivo cmdSql.php
<?php
//echo "dccsd";exit;
/* DEFINIÇÃO DESTA CLASSE: Receber as strings básicas Sql e executar (select / insert / update / delete)
* setar o resultado das instruções sql executadas no atributo 'retorno' e ...
* de uma classe extendida dessa se pode gerar a string xml e ...
* exibir o xml
*/
require_once("Banco.php");
class cmdSQL {
public $Banco;
public $msg;
public $lastInsertId;
// quando executado algum insert, guarda o id gerado pelo irsert do registro
public $retorno;
//GUARDA O RETORNO DA INSTRUÇÃO SQL EXECUTADA
public $rs;
// SETA O RECORDSET
public $sql;
// strings sql a executar
public $xml; // retorno transformado em xml
public function __construct() {
$this->Banco = new Banco();
$this->Banco->conectar();
}
//||||||||||||| COMANDOS DE SQL PARA OPERAÇÕES BÁSICAS |||||||||||||||||||||
//++++++++++++++++++++++++++ PESQUISAR ++++++++++++++++++++++++++
public function pesquisar() { // inicio do function PESQUISAR
try {
try // depende do resultado das instruções SQL a seguir
{
$this->rs = $this->Banco->con->prepare($this->sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); // ???????
unset ($this->sql);
$this->rs->execute(); //executa a instrução sql
$this->retorno[n_reg] = $this->rs->rowCount();
$this->retorno[n_cols] = $this->rs->columnCount();
if (($this->retorno[n_reg]) > 0) {
$this->retorno[res] = $this->rs->fetchAll(PDO::FETCH_ASSOC); //Retorna todas as linhas (registros) como um array
} else {
//Mensagem alertando que não econtrou registros
$this->msg = "Registro(s) não encontrado(s).";
}
} catch (Exception $e) {
$this->msg = "\nErro: Código: " . $e->getCode() . "Mensagem " . $e->getMessage();
}
} catch (Exception $exc) {
$this->msg = $this->msg . " <hr> " . $exc->getTraceAsString();
}
return $this->retorno;
}
// fim do function PESQUISAR
//++++++++++++++++++++++++++ INCLUIR ++++++++++++++++++++++++++
public function incluir() {
if (isset($this->Banco->con)) {
try {
$this->rs = $this->Banco->con->prepare($this->sql);
$this->rs->execute();
$this->lastInsertId = $this->Banco->con->lastInsertId();
$this->msg = 'Registro salvo com sucesso!';
} catch (Exception $e) {
$this->msg = "Erro de inclusão: Código: " . $e->getCode() . "Mensagem " . $e->getMessage();
}
}
return $this->retorno;
}
//++++++++++++++++++++++++++ ALTERAR ++++++++++++++++++++++++++
public function alterar() {
if (isset($this->Banco->con)) {
try {
$this->rs = $this->Banco->con->prepare($this->sql);
$this->rs->execute();
$this->msg = 'Registro alterado com sucesso!';
} catch (Exception $e) {
$this->msg = "Erro: Código: " . $e->getCode() . "Mensagem " . $e->getMessage();
}
}
return $this->retorno;
}
//++++++++++++++++++++++++++ EXCLUIR ++++++++++++++++++++++++++
public function excluir() {
if (isset($this->Banco->con)) {
try {
$this->rs = $this->Banco->con->prepare($this->sql);
$this->rs->execute();
$this->msg = 'Registro alterado com sucesso!';
} catch (Exception $e) {
$this->msg = "Erro: Código: " . $e->getCode() . "Mensagem " . $e->getMessage();
}
}
return $this->retorno;
}
public function extraiArrayXml() {
try {
if ($this->retorno[res]) {
foreach ($this->retorno[res] as $lin) {
foreach ($lin as $k => $col) {
$linha .= "<" . $k . ">" . utf8_encode($col) . "</" . $k . ">";
}
}
$this->xml .= "<registros>" . $linha . "</registros>";
}
if ($this->retorno[n_reg])
$this->xml .= "<n_reg>" . $this->retorno[n_reg] . "</n_reg>";
if ($this->retorno[n_cols])
$this->xml .= " <msg> " . $this->retorno[n_cols] . " </msg>";
if ($this->lastInsertId)
$this->xml .= " <lastInsertId> " . $this->lastInsertId . " </lastInsertId>";
if ($this->msg)
$this->xml .= " <msg> " . $this->msg . " </msg>";
} catch (Exception $exc) {
echo "Erro de extração da Array para XML.<hr>" . $exc->getTraceAsString();
}
}
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EXIBE XML %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
public function exibeXml() {
try {
$this->xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><raiz>" . $this->xml . "</raiz>";
header("Content-type: application/xml");
return $this->xml;
} catch (Exception $exc) {
echo '<msg>Erro de montagem XML!!!<msg>' . $exc->getTraceAsString();
}
}
}
?>
//USE ESTA CLASSE CMDSQL NAS TUAS APLICAÇOES PHP. NÃO MEIXA NO QUE JÁ ESTÁ FUNCIONANDO, SÓ USE.
<?php
require_once("cmdSql.php")
class classeTeste{
private $cmdSql;
public function __construct(){
$this->cmdSql = new cmdSql();
}
public function testeSql(){
$this->cmdSql->sql = "SELECT * FROM tabela";
$this->cmdSql->pesquisar();
echo $this->cmdSql->retorno[res][0][nome];
}
}
?>
paulo.sistema@gmail.com