<?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>Meio Código &#187; SQL</title>
	<atom:link href="http://www.meiocodigo.com/category/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.meiocodigo.com</link>
	<description>A peça que faltava para seu código.</description>
	<lastBuildDate>Sat, 14 Jan 2012 18:44:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Prepared Statements e CakePHP</title>
		<link>http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/</link>
		<comments>http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 13:17:56 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[prepared statements]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[sql injection]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=37</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/' addthis:title='Prepared Statements e CakePHP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Precisei montar uma SQL &#8220;na mão&#8221; usando o CakePHP pois ela era muito complexa. Mas me bateu a preocupação com o famoso SQL injection. Então me lembrei das minhas aulas de Programação Orientada a Objetos em que o professor falou que em java existia um método de uso de SQL chamado de prepared statement. O [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/' addthis:title='Prepared Statements e CakePHP ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/' addthis:title='Prepared Statements e CakePHP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Precisei montar uma SQL &#8220;na mão&#8221; usando o CakePHP pois ela era muito complexa. Mas me bateu a preocupação com o famoso SQL injection. Então me lembrei das minhas aulas de Programação Orientada a Objetos em que o professor falou que em java existia um método de uso de SQL chamado de prepared statement. O qual você monta a SQL colocando &#8216;?&#8217; onde serão colocados parâmetros que serão passado para a SQL. Mas ele me mostrou como fazer isso em Java, então fui em busca de uma solução parecida em CakePHP e encontrei. Vou postar um exemplo simples que logicamente poderia ser feito usando a abstração de banco do cake:
<pre class="brush: php">$query = &quot;SELECT nome FROM pessoa WHERE id = ? AND cpf = ?&quot;;
$values = array($this-&gt;params[&#039;named&#039;][&#039;pessoa_id&#039;],$this-&gt;params[&#039;named&#039;][&#039;cpf&#039;]);
$this-&gt;Pessoa-&gt;query($query,$values);</pre>
Veja que eu passei dois parâmetros para o método query do model: o meu SQL com duas &#8216;?&#8217; e um array com dois objetos que irão substituir as duas &#8216;?&#8217; do SQL. Veja que a ordem de substituição é a natural, ou seja, o primeiro item do array substitui a primeira &#8216;?&#8217; do SQL e assim sucessivamente.</p>

<p>É recomendado o uso dos prepared statements sempre que tiver que criar consultas com SQL e que precisem de parâmetros.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/' addthis:title='Prepared Statements e CakePHP ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Pegar valor atual de uma sequência em PostgreSQL</title>
		<link>http://www.meiocodigo.com/2007/05/20/pegar-valor-atual-de-uma-sequencia-em-postgresql/</link>
		<comments>http://www.meiocodigo.com/2007/05/20/pegar-valor-atual-de-uma-sequencia-em-postgresql/#comments</comments>
		<pubDate>Sun, 20 May 2007 14:52:01 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=9</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2007/05/20/pegar-valor-atual-de-uma-sequencia-em-postgresql/' addthis:title='Pegar valor atual de uma sequência em PostgreSQL '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Neste post, vamos falar de como pegar o ultimo valor de uma sequência de PostgreSQL. Para entender melhor o que são sequências, veja uma aplicação delas no post Auto-incremento em PostgreSQL. Uma das grandes aplicações do valor atual de uma sequência é a garantia de um banco relacional. Um registro que seja subdivido em várias [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2007/05/20/pegar-valor-atual-de-uma-sequencia-em-postgresql/' addthis:title='Pegar valor atual de uma sequência em PostgreSQL ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2007/05/20/pegar-valor-atual-de-uma-sequencia-em-postgresql/' addthis:title='Pegar valor atual de uma sequência em PostgreSQL '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Neste post, vamos falar de como pegar o ultimo valor de uma sequência de PostgreSQL. Para entender melhor o que são sequências, veja uma aplicação delas no post <a href="http://http://meiocodigo.wordpress.com/2007/05/18/auto-incremento-em-postgresql/">Auto-incremento em PostgreSQL</a>.</p>

<p>Uma das grandes aplicações do valor atual de uma sequência é a garantia de um banco relacional. Um registro que seja subdivido em várias entidades de um banco de dados precisa que a chave do registro seja passada com chave estrangeira para os diferentes registros nas diferentes entidades.</p>

<p>Para obter o valor atual de uma sequência(que teoricamente foi usado no ultimo registro, caso seja seguido o artigo citado acima) é usada a funcao <strong>currval</strong>. Como mostra o código abaixo:</p>

<p><pre class="brush: sql">SELECT currval(&#039;nome_da_sequencia&#039;);</pre></p>

<p>Bem, é isso. Qualquer dúvida deixa como comentário.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2007/05/20/pegar-valor-atual-de-uma-sequencia-em-postgresql/' addthis:title='Pegar valor atual de uma sequência em PostgreSQL ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2007/05/20/pegar-valor-atual-de-uma-sequencia-em-postgresql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Case-insensitive em PostgreSQL</title>
		<link>http://www.meiocodigo.com/2007/05/19/case-insensitive-em-postgresql/</link>
		<comments>http://www.meiocodigo.com/2007/05/19/case-insensitive-em-postgresql/#comments</comments>
		<pubDate>Fri, 18 May 2007 23:18:51 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=8</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2007/05/19/case-insensitive-em-postgresql/' addthis:title='Case-insensitive em PostgreSQL '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Hoje vamos falar de comparação de strings no PostgreSQL. Especificamente sobre a sensibilidade a caixa(maiúsculas e minúsculas), o que um grande empecilho à criação de sistemas de busca. Este também foi outro grande problema que eu enfrentei. O operador LIKE é case-sensitive(sensivel a maiúsculas e minúsculas). A solução foi simples e rápida. Existe um operador [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2007/05/19/case-insensitive-em-postgresql/' addthis:title='Case-insensitive em PostgreSQL ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2007/05/19/case-insensitive-em-postgresql/' addthis:title='Case-insensitive em PostgreSQL '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Hoje vamos falar de comparação de strings no PostgreSQL. Especificamente sobre a sensibilidade a caixa(maiúsculas e minúsculas), o que um grande empecilho à criação de sistemas de busca.</p>

<p>Este também foi  outro grande problema que eu enfrentei. O operador <strong>LIKE</strong> é <em>case-sensitive</em>(sensivel a maiúsculas e minúsculas).</p>

<p>A solução foi simples e rápida. Existe um operador chamado <strong>ILIKE</strong>, o qual é case-insensitive.</p>

<p>Exemplo:
<pre class="brush: sql">SELECT nome FROM empregado WHERE nome ILIKE &#039;vinicius&#039;;</pre>
O código acima retorna todos os registros onde o nome seja &#8216;vinicius&#8217;, &#8216;Vinicius&#8217;, &#8216;ViNiCiUs&#8217;, etc.</p>

<p>A sensibilidade à acentuação é um pouco mais complicada então vamos deixar para um próximo post.</p>

<p>Espero ter ajudado.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2007/05/19/case-insensitive-em-postgresql/' addthis:title='Case-insensitive em PostgreSQL ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2007/05/19/case-insensitive-em-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auto-Incremento em PostgreSQL</title>
		<link>http://www.meiocodigo.com/2007/05/18/auto-incremento-em-postgresql/</link>
		<comments>http://www.meiocodigo.com/2007/05/18/auto-incremento-em-postgresql/#comments</comments>
		<pubDate>Thu, 17 May 2007 22:04:42 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=6</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2007/05/18/auto-incremento-em-postgresql/' addthis:title='Auto-Incremento em PostgreSQL '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Neste post falarei a respeito de uma das dificuldades em se usar o gerenciador de banco de dados PostgreSQL. Uma das diferenças mais notáveis aos iniciantes no assunto: a falta da propriedade Auto-increment, a qual é largamente usada na criação de chaves primárias. Para resolver esta falta, seguem abaixo duas formas de simular a mesma [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2007/05/18/auto-incremento-em-postgresql/' addthis:title='Auto-Incremento em PostgreSQL ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2007/05/18/auto-incremento-em-postgresql/' addthis:title='Auto-Incremento em PostgreSQL '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Neste post falarei a respeito de uma das dificuldades em se usar o gerenciador de banco de dados PostgreSQL. Uma das diferenças mais notáveis aos iniciantes no assunto: a falta da propriedade Auto-increment, a qual é largamente usada na criação de chaves primárias.</p>

<p>Para resolver esta falta, seguem abaixo duas formas de simular a mesma propriedade no PostgreSQL:</p>

<p>Para se criar um campo de uma tabela com valores sequenciais(adequado para chaves) existem duas formas. Uma delas leva a outra.</p>

<p>Vamos comecar pela mais simples, criar a sequencia no momento da criaçao da tabela através do tipo SERIAL:
<pre class="brush: sql">CREATE TABLE pessoa
(id SERIAL PRIMARY KEY,
nome VARCHAR(100));</pre>
A forma acima simula o que eu vou exemplificar abaixo, a criação da sequencia manualmente:
<pre class="brush: sql">CREATE SEQUENCE pessoa_id_seq;&lt;/p&gt;

&lt;p&gt;CREATE TABLE pessoa
(id INTEGER PRIMARY KEY DEFAULT nextval(&#039;pessoa_id_seq&#039;),
nome VARCHAR(100));</pre>
Atente para a igualdade entre o nome da sequencia e o parametro passado para a função nextval.</p>

<p>Bem, é isso, espero ter ajudado.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2007/05/18/auto-incremento-em-postgresql/' addthis:title='Auto-Incremento em PostgreSQL ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2007/05/18/auto-incremento-em-postgresql/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

