geek gyn

Jun11th

PHP 5.2.6 + Postgresql 8.3.1-1

Isso não funfa nem a pau Juvenal!!!!

Brincadeiras a parte se você estiver tendo problemas para fazer o PHP + Postgresql conversarem faça um teste básico. Vá no prompt de comando (windows né! argh). Digite php. Se você receber uma mensagem assim: PHP Warning: PHP Startup: Unable to load dynamic library´C:\PHP\ext\php_pgsql.dll´ - Não foi possível encontrar o módulo especificado. E você tiver certeza que este arquivo está lá, você vai pensar que lascou tudo. Phudeu! Lascou mesmo! kkkk

Quer saber a solução? Desinstala o PHP 5.2.6 e instala a versão  5.2.5. Básico assim. Mas parece que se você copiar umas lib da versão 5.2.6 para a 5.2.5 esse erro para de acontecer. Mas quem garante que outros (e, talvez, piores) erros não vão acontecer.

Apr29th

Manuais

Como tem algumas pessoas me pedindo o manual do php vai aí o download dele e também do mysql. Os dois no formato chm que é bem tranquilo para pesquisar.

PHP Manual

MySQL Manual

Feb9th

Conexão do php com o oracle

Uma classe para conexão do php com Oracle.
É simples, mas é prática e a que utilizo no dia a dia.
Não irei detalhar pois os comandos são todos encontrados em php.net
<?php
class BancoRollback{
public static $conn;
public $sql;
public $res_sql;
public $stmt;
public $total_linhas;
public $erro = “”;

//método que faz a conexão com o banco
public static function conectaBD(){
self::$conn = OCILogon(”usuario”, “senha”, “//127.0.0.1/orcl”);
if (!self::$conn) {
exit;
}
}

//método para desconectar do banco
public static function desconectaBD(){
oci_close(self::$conn);
}

//este método é utilizado para comitar a transação após dar um insert/update/delete com o outro método abaixo (executa_SQL()).
public static function comitar(){
oci_commit(self::$conn);
}

//este método é utilizado para desfazer a operação após dar um insert/update/delete com o outro método abaixo (executa_SQL()).
public static function rollBack(){
oci_rollback(self::$conn);
}

//método que executa o comando sql repassado.
public function executa_SQL(){
//prepara o sql
$this->stmt = oci_parce(self::$conn, $this->sql);
/*executa o sql. note no OCI_DEFAULT. se no lugar dele estivesse OCI_COMMIT_ON_SUCCESS não seria preciso comitar usando o método comitar, pois todos os comandos executados seriam COMITADOS SE HOUVER SUCESSO. você pode não especificar este segundo parâmetro, mas se você fizer isto por padrão ele assume OCI_COMMIT_ON_SUCCESS.*/
$this->res_sql = oci_execute($this->stmt, OCI_DEFAULT);
//testa se retornou false, ou seja, se falhou
if(!$this->res_sql){
aqui ele retorna o erro, sendo que este pode ser facilmente visto somente chamando a variável erro da classe.
$msg_erro = oci_error($this->stmt);
$this->erro = $msg_erro['message'];
}
//então retorna o resultado da execução do comando
return $this->res_sql;
}
}
?>
Então é isso. Uma classe simples e fácil de ser implementada.
Bom proveito. Se gostou não esqueça de comentar. Se não gostou comente também. Críticas são bem vindas mas talvez eu não responda. ;)

Jan11th

Usando cursor no oracle

E aí galera. Tudo bem?

Vamos lá.

Os cursores em banco de dados quebram um galhão. Eu os utilizo para, principalmente, fazer um update em vários itens de uma tabela. Para ler vários registros em uma tabela, percorre-los e gravar em outra.

No exemplo abaixo usei a situação hipotética de que existe uma tabela já povoada, mas que não será mais utilizada pois foi criada uma nova estrutura. Só que precisa das informações da primeira na segunda. Você poderia fazer um código em delphi, vb, php, java, etc para fazer isso pra vc. Mas você pode fazer isso diretamente no banco de dados. Não sei de outros bancos, mas no ORACLE é assim.

Código:

DECLARE

CURSOR cursortbl IS

SELECT id, nome, cpf FROM clientes_antigo;

BEGIN

FOR recurso IN cursortbl LOOP

INSERT INTO clientes_novo (id, nome, cpf) VALUES (recurso.id, recurso.nome, recurso.cpf);

END LOOP;

COMMIT;

END;