<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>Anderson Fraga</title> <atom:link href="http://andersonfraga.net/blog/feed" rel="self" type="application/rss+xml" /><link>http://andersonfraga.net/blog</link> <description>Sobre Desenvolvimento de Software</description> <lastBuildDate>Fri, 16 Sep 2011 15:56:28 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.2.1</generator> <item><title>QConSP 2011 &#8211; Eu fui!</title><link>http://andersonfraga.net/blog/2011-09-15/qconsp-eu-fui</link> <comments>http://andersonfraga.net/blog/2011-09-15/qconsp-eu-fui#comments</comments> <pubDate>Thu, 15 Sep 2011 13:33:47 +0000</pubDate> <dc:creator>andersonfraga</dc:creator> <category><![CDATA[Eventos]]></category> <category><![CDATA[QConSP]]></category> <category><![CDATA[congressos]]></category> <category><![CDATA[eventos]]></category> <category><![CDATA[qconsp]]></category><guid isPermaLink="false">http://andersonfraga.net/blog/?p=39</guid> <description><![CDATA[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 &#8230; <a href="http://andersonfraga.net/blog/2011-09-15/qconsp-eu-fui">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Ocorreu nos dias 10 e 11 de setembro, na Fecomércio em São Paulo, a <a href="http://www.qconsp.com" title="QConSP" target="_blank">QConSP</a>.<br /> Um evento espetacular realizado pela <a href="http://www.caelum.com.br/" title="Caelum" target="_blank">Caelum</a> e pela <a href="http://www.infoq.com/br/" title="InfoQ" target="_blank">InfoQ</a> (e muito mais patrocinadores).</p><p>Abaixo, está uma lista de todas as palestras (que consegui buscar e/ou foram disponibilizadas) que lá ocorreram:</p><p>Slides:<br /> <a href="http://www.slideshare.net/RicardoValeriano/javascript-prototipao-closure-e-encapsulamento" target="_blank">http://www.slideshare.net/RicardoValeriano/javascript-prototipao-closure-e-encapsulamento</a><br /> <a href="http://www.slideshare.net/rgaiser/r7-no-aws-qcon-sp-2011" target="_blank">http://www.slideshare.net/rgaiser/r7-no-aws-qcon-sp-2011</a><br /> <a href="http://www.slideshare.net/bluesoftbr/lices-aprendidas-em-4-anos-de-agilidade" target="_blank">http://www.slideshare.net/bluesoftbr/lices-aprendidas-em-4-anos-de-agilidade</a><br /> <a href="http://www.slideshare.net/akitaonrails/qcon-sp-2011-a-semente-no-entendida-de-todas-as-metodologias" target="_blank">http://www.slideshare.net/akitaonrails/qcon-sp-2011-a-semente-no-entendida-de-todas-as-metodologias</a><br /> <a href="http://www.slideshare.net/jwalendowsky/edio-de-contedo-web-usando-javascript-de-ponta-a-ponta" target="_blank">http://www.slideshare.net/jwalendowsky/edio-de-contedo-web-usando-javascript-de-ponta-a-ponta</a><br /> <a href="http://www.slideshare.net/caelumdev/design-de-cdigo-qualidade-que-faz-a-diferena-qcon-2011" target="_blank">http://www.slideshare.net/caelumdev/design-de-cdigo-qualidade-que-faz-a-diferena-qcon-2011</a><br /> <a href="http://www.slideshare.net/brunoborges/java-mais-gil-que-nunca-no-desenvolvimento-web" target="_blank">http://www.slideshare.net/brunoborges/java-mais-gil-que-nunca-no-desenvolvimento-web</a><br /> <a href="http://www.slideshare.net/franciscosouza/os-complicados-testes-de-interface" target="_blank">http://www.slideshare.net/franciscosouza/os-complicados-testes-de-interface</a><br /> <a href="http://www.slideshare.net/alexandrefreire/dvida-tecnica-precisando-de-crdito-quo-fundo-entrar-e-como-evitar-que-o-cobrador-bata-na-sua-porta" target="_blank">http://www.slideshare.net/alexandrefreire/dvida-tecnica-precisando-de-crdito-quo-fundo-entrar-e-como-evitar-que-o-cobrador-bata-na-sua-porta</a><br /> <a href="http://www.slideshare.net/wbotelhos/controle-de-permisso-com-vraptor-qcon-sp-2011-lt" target="_blank">http://www.slideshare.net/wbotelhos/controle-de-permisso-com-vraptor-qcon-sp-2011-lt</a><br /> <a href="http://www.slideshare.net/fernandodelariva/qcon2011leanstartupdelariva" target="_blank">http://www.slideshare.net/fernandodelariva/qcon2011leanstartupdelariva</a><br /> <a href="http://www.slideshare.net/flatorres/varnish-qconsp-2011" target="_blank">http://www.slideshare.net/flatorres/varnish-qconsp-2011</a><br /> <a href="http://www.slideshare.net/emerleite/jogos-com-nodejs-e-browser-qcon-sp-2011" target="_blank">http://www.slideshare.net/emerleite/jogos-com-nodejs-e-browser-qcon-sp-2011</a><br /> <a href="http://www.slideshare.net/chrisreichel/por-um-java-mais-funcional" target="_blank">http://www.slideshare.net/chrisreichel/por-um-java-mais-funcional</a><br /> <a href="http://www.slideshare.net/eduardo.bregaida/cultura-da-empresa-um-problema-na-adoo-gil-9209925" target="_blank">http://www.slideshare.net/eduardo.bregaida/cultura-da-empresa-um-problema-na-adoo-gil-9209925</a><br /> <a href="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" target="_blank">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</a><br /> <a href="http://www.slideshare.net/cecifernandes/melhorando-um-ambiente-gil/" target="_blank">http://www.slideshare.net/cecifernandes/melhorando-um-ambiente-gil/</a><br /> <a href="http://www.slideshare.net/hiroasari/spring-into-rails" target="_blank">http://www.slideshare.net/hiroasari/spring-into-rails</a><br /> <a href="http://www.slideshare.net/cmilfont/combinando-oo-e-funcional-em-javascript-de-forma-prtica" target="_blank">http://www.slideshare.net/cmilfont/combinando-oo-e-funcional-em-javascript-de-forma-prtica</a><br /> <a href="http://www.slideshare.net/danieldestro/arquitetura-de-um-sistema-crtico-de-alta-disponibilidade-com-solues-open-source" target="_blank">http://www.slideshare.net/danieldestro/arquitetura-de-um-sistema-crtico-de-alta-disponibilidade-com-solues-open-source</a><br /> <a href="http://www.slideshare.net/seatecnologia/fail-9244960" target="_blank">http://www.slideshare.net/seatecnologia/fail-9244960</a></p><p>Outros links:<br /> <a href="http://meiobit.com/91155/jpegministartup-refina-de-forma-impressionante-compresso-de-imagens/" target="_blank">http://meiobit.com/91155/jpegministartup-refina-de-forma-impressionante-compresso-de-imagens/</a><br /> <a href="http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/" target="_blank">http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/</a><br /> <a href="http://dudumendes.com/2011/09/12/qconsp-2011-eu-fui/" target="_blank">http://dudumendes.com/2011/09/12/qconsp-2011-eu-fui/</a><br /> <a href="http://webinsider.uol.com.br/2011/09/12/o-valor-para-as-empresas-e-um-conceito-em-evolucao/" target="_blank">http://webinsider.uol.com.br/2011/09/12/o-valor-para-as-empresas-e-um-conceito-em-evolucao/</a><br /> <a href="http://webinsider.uol.com.br/2011/09/10/analistas-e-usuarios-quando-vao-se-entender/" target="_blank">http://webinsider.uol.com.br/2011/09/10/analistas-e-usuarios-quando-vao-se-entender/</a><br /> <a href="http://www.noop.nl/2009/01/100-interview-questions-for-software-developers.html" target="_blank">http://www.noop.nl/2009/01/100-interview-questions-for-software-developers.html</a><br /> <a href="http://www.slideshare.net/emerleite/secomp-2011-nodejs-introduo" target="_blank">http://www.slideshare.net/emerleite/secomp-2011-nodejs-introduo</a><br /> <a href="http://www.franciscosouza.com.br/2011/09/13/como-foi-a-qconsp-2011/" target="_blank">http://www.franciscosouza.com.br/2011/09/13/como-foi-a-qconsp-2011/</a></p> ]]></content:encoded> <wfw:commentRss>http://andersonfraga.net/blog/2011-09-15/qconsp-eu-fui/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>[PHP] Bug em consultas com diversos &#8216;hashes&#8217; no PDO</title><link>http://andersonfraga.net/blog/2011-02-13/php-bug-em-consultas-com-diversos-hashes-no-pdo</link> <comments>http://andersonfraga.net/blog/2011-02-13/php-bug-em-consultas-com-diversos-hashes-no-pdo#comments</comments> <pubDate>Sun, 13 Feb 2011 19:43:44 +0000</pubDate> <dc:creator>andersonfraga</dc:creator> <category><![CDATA[Bugs]]></category> <category><![CDATA[PDO]]></category> <category><![CDATA[PHP]]></category><guid isPermaLink="false">http://andersonfraga.net/blog/?p=9</guid> <description><![CDATA[Do php.net: &#8220;The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP.&#8221; Estou codificando um &#8216;driver&#8217; para um framework na Viavale. Esse driver usará a extensão de conexão ao banco de dados PDO, nativo &#8230; <a href="http://andersonfraga.net/blog/2011-02-13/php-bug-em-consultas-com-diversos-hashes-no-pdo">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Do <a href="http://www.php.net/" target="_blank">php.net</a>: &#8220;The <em>PHP Data Objects</em> (<a href="http://www.php.net/manual/pt_BR/book.pdo.php" target="_blank">PDO</a>) extension defines a lightweight, consistent interface for accessing databases in PHP.&#8221;</p><p>Estou codificando um &#8216;driver&#8217; para um framework na <a href="http://www.viavale.com.br/" target="_blank">Viavale</a>. Esse driver usará a extensão de conexão ao banco de dados PDO, nativo do PHP desde a versão 5.0.</p><p>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 &#8216;mysql_connect&#8217;, &#8216;pgsql_connect&#8217; e tantos outros).<br /> 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:</p><blockquote><p> PDO provides a data-access abstraction layer, which means that, regardless of which database you&#8217;re using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn&#8217;t rewrite SQL or emulate missing features.</p></blockquote><p>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:</p><div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
try <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$dbh</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> PDO<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mysql:/*irrelevant*/'</span><span style="color: #339933;">,</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span>
        PDO<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_ERRMODE</span> <span style="color: #339933;">=&gt;</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">ERRMODE_EXCEPTION</span><span style="color: #339933;">,</span>
        PDO<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_EMULATE_PREPARES</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Notem abaixo a utilização de hash_1 mais de uma vez. Aqui está o problema...</span>
    <span style="color: #000088;">$select</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;SELECT * FROM CLIENTE
        WHERE ATIVO = 'S'
          AND (NOME LIKE :hash_1
           OR ENDERECO LIKE :hash_1)
        ORDER BY ID DESC
        LIMIT :hash_2;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$statement</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$dbh</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$statement</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">':hash_1'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'%Anderson%'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">':hash_2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$fetch</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$statement</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span>PDO<span style="color: #339933;">::</span><span style="color: #004000;">FETCH_ASSOC</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fetch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
catch<span style="color: #009900;">&#40;</span>PDOException <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div><p>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:</p><blockquote><p>SQLSTATE[HY093]: Invalid parameter number</p></blockquote><p>O mais &#8216;interessante&#8217; é que, na versão 5.2.14, este erro não ocorre. É retornado um ResultSet correto!</p><p>Infelizmente, a solução que encontrei, por enquanto, é tratar a string do SQL e fazer criar um novo &#8216;hash&#8217; para cada vez que ele for repetido.</p><p>De praxe, criei um report no bugfix do PHP. O link é esse: <a href="http://bugs.php.net/bug.php?id=53960">http://bugs.php.net/bug.php?id=53960</a></p> ]]></content:encoded> <wfw:commentRss>http://andersonfraga.net/blog/2011-02-13/php-bug-em-consultas-com-diversos-hashes-no-pdo/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 219/227 objects using disk: basic

Served from: andersonfraga.net @ 2012-05-14 19:28:47 -->
