QConSP 2011 – Eu fui!

Ocorreu nos dias 10 e 11 de setembro, na Fecomércio em São Paulo, a QConSP.
Um evento espetacular realizado pela Caelum e pela InfoQ (e muito mais patrocinadores).

Abaixo, está uma lista de todas as palestras (que consegui buscar e/ou foram disponibilizadas) que lá ocorreram:

Slides:
http://www.slideshare.net/RicardoValeriano/javascript-prototipao-closure-e-encapsulamento
http://www.slideshare.net/rgaiser/r7-no-aws-qcon-sp-2011
http://www.slideshare.net/bluesoftbr/lices-aprendidas-em-4-anos-de-agilidade
http://www.slideshare.net/akitaonrails/qcon-sp-2011-a-semente-no-entendida-de-todas-as-metodologias
http://www.slideshare.net/jwalendowsky/edio-de-contedo-web-usando-javascript-de-ponta-a-ponta
http://www.slideshare.net/caelumdev/design-de-cdigo-qualidade-que-faz-a-diferena-qcon-2011
http://www.slideshare.net/brunoborges/java-mais-gil-que-nunca-no-desenvolvimento-web
http://www.slideshare.net/franciscosouza/os-complicados-testes-de-interface
http://www.slideshare.net/alexandrefreire/dvida-tecnica-precisando-de-crdito-quo-fundo-entrar-e-como-evitar-que-o-cobrador-bata-na-sua-porta
http://www.slideshare.net/wbotelhos/controle-de-permisso-com-vraptor-qcon-sp-2011-lt
http://www.slideshare.net/fernandodelariva/qcon2011leanstartupdelariva
http://www.slideshare.net/flatorres/varnish-qconsp-2011
http://www.slideshare.net/emerleite/jogos-com-nodejs-e-browser-qcon-sp-2011
http://www.slideshare.net/chrisreichel/por-um-java-mais-funcional
http://www.slideshare.net/eduardo.bregaida/cultura-da-empresa-um-problema-na-adoo-gil-9209925
https://www.ibm.com/developerworks/mydeveloperworks/blogs/rationalbrasil/entry/palestra_qcon_sp_ferramentas_ou_processos_n_c3_a3o_v_c3_a3o_te_salvar41?lang=pt_br
http://www.slideshare.net/cecifernandes/melhorando-um-ambiente-gil/
http://www.slideshare.net/hiroasari/spring-into-rails
http://www.slideshare.net/cmilfont/combinando-oo-e-funcional-em-javascript-de-forma-prtica
http://www.slideshare.net/danieldestro/arquitetura-de-um-sistema-crtico-de-alta-disponibilidade-com-solues-open-source
http://www.slideshare.net/seatecnologia/fail-9244960

Outros links:
http://meiobit.com/91155/jpegministartup-refina-de-forma-impressionante-compresso-de-imagens/
http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/
http://dudumendes.com/2011/09/12/qconsp-2011-eu-fui/
http://webinsider.uol.com.br/2011/09/12/o-valor-para-as-empresas-e-um-conceito-em-evolucao/
http://webinsider.uol.com.br/2011/09/10/analistas-e-usuarios-quando-vao-se-entender/
http://www.noop.nl/2009/01/100-interview-questions-for-software-developers.html
http://www.slideshare.net/emerleite/secomp-2011-nodejs-introduo
http://www.franciscosouza.com.br/2011/09/13/como-foi-a-qconsp-2011/

Posted in Eventos, QConSP | Tagged , , | 6 Comments

[PHP] Bug em consultas com diversos ‘hashes’ no PDO

Do php.net: “The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP.”

Estou codificando um ‘driver’ para um framework na Viavale. Esse driver usará a extensão de conexão ao banco de dados PDO, nativo do PHP desde a versão 5.0.

Como dito na descrição, a facilidade desta extensão é a possibilidade de utilizar diversos tipos de banco de dados, sem alterar funções e coisas do gênero (como bem acontece ao utilizar os métodos nativos, como ‘mysql_connect’, ‘pgsql_connect’ e tantos outros).
Como bem segue na documentação da extensão, infelizmente o PDO não é uma extensão de abstração do banco de dados, é apenas de conexão à ela:

PDO provides a data-access abstraction layer, which means that, regardless of which database you’re using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn’t rewrite SQL or emulate missing features.

Bom, vamos ao problema. Enquanto eu criava a classe que utilizaria o PDO e faria o trabalho sujo de conexão ao banco de dados, fui pego por um problema um tanto quanto chato (e não descrito em local algum na documentação atual). No meu cenário, utilizo diversos campos de uma (ou mais) tabela(s) para fazer uma busca, pela mesma palavra-chave:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
 
try {
    $dbh = new PDO('mysql:/*irrelevant*/', Array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
    ));
 
    // Notem abaixo a utilização de hash_1 mais de uma vez. Aqui está o problema...
    $select = "SELECT * FROM CLIENTE
        WHERE ATIVO = 'S'
          AND (NOME LIKE :hash_1
           OR ENDERECO LIKE :hash_1)
        ORDER BY ID DESC
        LIMIT :hash_2;";
 
    $statement = $dbh->prepare($select);
    $statement->execute(Array(
        ':hash_1' => '%Anderson%',
        ':hash_2' => 0,
    ));
 
    $fetch = $statement->fetchAll(PDO::FETCH_ASSOC);
    print_r($fetch);
}
catch(PDOException $e) {
    print_r($e->getMessage());
}

O correto seria ele me retornar um ResultSet com todos os resultados que casem com as condições. Bom, esse seria o cenário correto. O problema é que, a partir da versão 5.3 (pelo o que pude apurar) do PHP, ele me retorna uma Exception:

SQLSTATE[HY093]: Invalid parameter number

O mais ‘interessante’ é que, na versão 5.2.14, este erro não ocorre. É retornado um ResultSet correto!

Infelizmente, a solução que encontrei, por enquanto, é tratar a string do SQL e fazer criar um novo ‘hash’ para cada vez que ele for repetido.

De praxe, criei um report no bugfix do PHP. O link é esse: http://bugs.php.net/bug.php?id=53960

Posted in Bugs, PDO, PHP | Comments Off