Archive for » August, 2007 «

Friday, August 31st, 2007 | Author: admin

Eu descobri um erro quando estava fazendo o meu script em PHP usando o conector PDO.
(I’ve found a bug when working on a PHP script using a PDO connector.)

Quando fiz uma Stored Procedure usando o recurso PREPARE dentro, ocorreu um problema com o resultado do meu script em PHP.
(When I made a Store Procedure using the PREPARE statement something messed up the result im my PHP script.)

Config:

System: Linux Debian 2.6.21-2-486
Apache: Apache 2.0 Handler
PHP: Version 5.2.3-1+b1
MySQL: 5.0.45

Seguem abaixo os códigos:
(The code is shown below:)

Estrutura da tabela (Table Structure)

CREATE TABLE `tb_user` (
  `cd_user` int(11) NOT NULL auto_increment,
  `login` varchar(32) NOT NULL,
  `password` varchar(32) NOT NULL,
  PRIMARY KEY  (`cd_user`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- INSERT tb_user
-- 

INSERT INTO `tb_user` VALUES (1, 'lula', 'lele');
INSERT INTO `tb_user` VALUES (2, 'php', 'cool');

Stored Procedure SELECT

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_test_select`$$
CREATE PROCEDURE `test`.`sp_test_select` ()
BEGIN

	SELECT login,password FROM test.tb_user;

END$$

DELIMITER ;

Stored Procedure PREPARE

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_test_prepare`$$
CREATE PROCEDURE `test`.`sp_test_prepare` ()
BEGIN

	PREPARE s1 FROM 'SELECT login,password FROM test.tb_user';
	EXECUTE s1;
	DEALLOCATE PREPARE s1;

END$$

DELIMITER ;

Código PHP (PHP Code)

function result($sql)
{
    $db = new PDO('mysql:dbname=test;host=127.0.0.1', 'test','test');
    $stm = $db->prepare($sql);
    $stm->execute();

    echo "\n######## $sql #######\n";

    while ($row = $stm->fetch(PDO::FETCH_ASSOC)) {
        echo $row["login"]." - ".$row["password"]."\n";
    }   

    $db = null;
    $stm = null;
}   

result("SELECT * FROM tb_user");

result("CALL sp_test_select()");

result("CALL sp_test_prepare()");

Resultado (Result)

zed:/www/directdial/tmp# php pdo.php 

######## SELECT * FROM tb_user #######
lula - lele
php - cool

######## CALL sp_test_select() #######
lula - lele
php - cool

######## CALL sp_test_prepare() #######
 -
pcoolb_usertb_usepassworpassword
                                 ý¨ˆ”�½test -

Aqui esta o problema, quando chamo CALL sp_test_prepare() pelo PDO , ele não retorna corretamente os valores.
(Here lies the problem. When I call CALL sp_test_prepare() through PDO, it does not return the values as it should.)

Se você sabe como resolver este problema, por favor poste um comentário.
(If you know how to fix this bug, please comment on this thread.)

Resolução

Encontrei a resposta no seguinte link:
http://pecl.php.net/bugs/bug.php?id=7365

Category: PHP  | Tags: , , ,  | Leave a Comment
Thursday, August 16th, 2007 | Author: admin

Introdução

O conceito básico do relacionamento entre os objetos de dados (objetos extendidos de Zend_Db_Table_Abstract)
é o cascateamento de operações como SELECT, UPDATE e DELETE .

Consulte:

Objetivo

Criar um setor de uma empresa, que possa ter vários funcionários relacionados com ele (um para muitos).

Condições

Quando selecionar o setor, mostrar os seus funcionários, sem usar SELECT em tb_funcionarios, tentar usar o relacionamento para apresenta-los.
Quando um setor for apagado, fazer com que o sistema apague todos os funcionários ralacionados.

Solução

Relacionamento

Primeiro iremos criar as referências entre as objetos de dados chamados DoSetor e DoFuncionario.

Na classe DoSetor inserimos a sua dependencia com o DoFuncionario, usando o parametro $_dependentTables.

class DoSetor extends Zend_Db_Table_Abstract
{
	protected $_name = "tb_setor";

	protected $_primary = "cd_setor";

	protected $_dependentTables = array('DoFuncionario');
}

arquivo: DoSetor.php

Na classe DoFuncionario use o parametro $_referenceMap, passando um array com o nome da referencia as colunas(no caso cd_setor) e as operações permitidas (onDelete e onUpdate como self::CASCADE).

class DoFuncionario extends Zend_Db_Table_Abstract
{
	protected $_name = "tb_funcionario";

	protected $_primary = "cd_funcionario";

	protected $_referenceMap    = array(
			'DoSetor' => array(
				'columns'           => array('cd_setor'),
				'refTableClass'     => 'DoSetor',
				'refColumns'        => array('cd_setor'),
				'onDelete'          => self::CASCADE,
				'onUpdate'          => self::CASCADE
				)
			);
}

arquivo: DoFuncionario.php

Exibição dos Dados

Quando a consulta é pelo o objeto dependente usa-se doObjeto->FindParentRow(“nome_obj_relacao”), no nosso caso seleciona-se o
Funcionário e depois procura-se o seu Setor.
Quando é o objeto que possue dependentes usa-se doObjeto->findDoObjeto_Dependente, no nosso caso coloa-se o Funcionário
como parametro na chamada do método.

echo "Listando por Cliente:";
$funcionario = $doFuncionario->fetchAll();
foreach($funcionario as $currentFuncionario)
{
    $setor = $currentFuncionario->FindParentRow("DoSetor");

    echo "{$currentFuncionario->nm_funcionario} - {$setor->nm_setor}\n";
}

echo "Listando por Setor:";
$setor= $doSetor->fetchAll();
foreach($setor as $currentSetor)
{
    $funcionario = $currentSetor->findDoFuncionario();

    foreach($funcionario as $currentFuncionario)
    {
        echo "{$currentSetor->nm_setor} - {$currentFuncionario->nm_funcionario}\n";
    }
}

arquivo Ex0001Controller.php

Excluindo Registro

Ao apagar um setor, apaga-se todos os funcionários relacionados.

echo "Apagando setor: Financeiro.";
$setor = $doSetor->find($cd_setor);
$setor = $setor->current();
$setor->delete();

arquivo Ex0001Controller.php

Conclusão

A vantagem de usar este tipo de dependência é o fato de não se preocupar com a integridade dos dados, e dexando a responsabilidade para o ZF.
Quando ocorrerem relacionamentos mais complexos, estas referências facilitam a implementação das regras de negócio.

Thursday, August 16th, 2007 | Author: admin

Estes exemplos visam a demosntrações práticas de objetos e metodologias usados no Zend Framework (de acordo com meus estudos).

É exigido um nível intermediário em PHP e iniciante em Zend Framework e uma boa noção de programação Orientada a Objeto. Caso você não tenha tais conhecimentos, use ferramentas de busca, tutorias, fórums listas etc, para manter-se atualizado.

Exemplos:

Arquivo

zeddemo_v0.1.tar.bz2

Desconpacte o arquivo zeddemo_vXXX.tar.bzip2 na sua pasta de hosts (para windows use o 7Zip)

ex. /var/www/zeddemo/www (no Linux).

CONFIGURANDO APACHE

Verifique se o mod_rewrite esta habilitado no seu APACHE, caso nao esteja, procure na sua ferramenta de pesquisa como que instala.
Primeiramente crie o host no seu APACHE.

<VirtualHost *>
    ServerName zeddemo.meudominio.com
    DocumentRoot /var/www/zeddemo/html
</VirtualHost>

Edite o arquivo hosts (/etc/hosts no Linux) adicionando:

127.0.0.1 zeddemo.meudominio.com

CONFIGURANDO MYSQL

Crie um usuário e senha no seu banco de dados:
usuário: zeddemo
senha: zeddemo

No diretório suport temos o arquivo db_demo.sql que é a base de dados aonde irei colocar os exemplos que mexem com base de dados.

Use o seguinte comando para importar diretamente a base:

linux:/var/www/zeddemo/www/suport# mysql -u zeddemo --password=zeddemo < db_demo.sql

Ou use a ferramenta que achar conveniente para importar o arquivo db_demo.sql.

Baixando o ZF

Acesse a página http://framework.zend.com/download .
E baixe a última versão do ZendFramework

Descompacte o arquivo e copie a pasta ZendFrameworkXXXX/library/Zend
para a sua estrutura /var/www/zeddemo/library .

DIVIRTA-SE

Espero estar contribuindo para o aumento do seu conhecimento e quem sabe trocar algumas idéias.
Que você seja promovido a Diretor e lembre de mim quando abrir uma oportunidade ^^ .

Qualquer dúvida entre em contato com o mantedor deste código.

Alexandre F. Martins - uzedmaster@gmail.com
http://www.uzed.com.br/zed

Tuesday, August 07th, 2007 | Author: admin

Arquivo .vimrc


set ts=4
set sw=4
set syntax=on
syn on
set foldmethod=marker
Category: Informática  | Tags:  | Leave a Comment
Thursday, August 02nd, 2007 | Author: admin

PyConBrasil
30/08/2007 Ã 01/09/2007 – Joinville/SC
Latinoware 2007 13/11/2007 e 14/11/2007 – Foz do Iguaçu/PR
PHP Conference Brasil 2007 30/11/2007 e 01/12/2007 – Osasco/SP
Category: Informática  | Leave a Comment