<?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>Isern Palaus &#187; mysql</title>
	<atom:link href="http://blog.ipalaus.es/tag/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.ipalaus.es</link>
	<description>PHP, CodeIgniter y jQuery</description>
	<lastBuildDate>Sat, 10 Apr 2010 13:10:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Consultas MySQL en CodeIgniter</title>
		<link>http://blog.ipalaus.es/consultas-mysql-en-codeigniter</link>
		<comments>http://blog.ipalaus.es/consultas-mysql-en-codeigniter#comments</comments>
		<pubDate>Mon, 17 Mar 2008 10:49:28 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[consultas mysql]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/consultas-mysql-en-codeigniter</guid>
		<description><![CDATA[Aunque pueda parecer difícil, hacer consultas en MySQL en CodeIgniter es la cosa más fácil del mundo. Y no solo con MySQL sino con todos los protocolos soportados por el framework.  Es importante, sobretodo, que tengamos nuestro CodeIgniter correctamente configurado. Podéis echarle una ojeada al artículo de configuración y iniciación para ver como configuramos <a href="http://blog.ipalaus.es/consultas-mysql-en-codeigniter" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Aunque pueda parecer difícil, hacer consultas en <a href="http://www.mysql.org">MySQL</a> en <a href="http://www.codeigniter.com">CodeIgniter</a> es la cosa más fácil del mundo. Y no solo con MySQL sino con todos los protocolos soportados por el <em>framework</em>.  Es importante, sobretodo, que tengamos nuestro <a href="http://www.codeigniter.com">CodeIgniter</a> correctamente configurado. Podéis echarle una ojeada al artículo de <a href="http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion">configuración y iniciación</a> para ver como configuramos los datos de MySQL.</p>
<p><a href="http://www.codeigniter.com">CodeIgniter</a>, a parte, nos da la posibilidad de trabajar con más de una base de datos a la vez, configurando y conectando específicamente a una u otra dependiendo de las necesidades. Sin embargo, no es el objeto de esta explicación. </p>
<p>Supongamos que queremos hacer una consulta parecida a la siguiente:<br />
<code>SELECT * FROM entradas</code></p>
<p>Lo normal en PHP sería usar un <em>mysql_query(&#8220;SELECT * FROM entradas&#8221;);</em>, sin embargo en <a href="http://www.codeigniter.com">CodeIgniter</a> (y usando librería específica) lo usaríamos de la siguiente forma:<br />
[code lang="php"]<br />
$this->db->query("SELECT * FROM entradas");<br />
[/code]</p>
<h2>GET</h2>
<p>Conclusión, podemos usarlo de la misma manera. Luego si quisiéramos estructurar los resultados podríamos usar la función <a href="http://www.php.net/foreach"><em>foreach</em></a> de PHP. Sin embargo, hay una manera mucho más fácil en <a href="http://www.codeigniter.com">CodeIgniter</a> de tratar las consultas. Ellos lo llaman el <em>Active Record Class</em> y se emplearía, para el ejemplo de antes, así:<br />
[code lang="php"]<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas;<br />
[/code]</p>
<p>También en <em>$this->db->get();</em> es posible usar un segundo parámetro para especificar un <em>LIMIT</em>:<br />
[code lang="php"]<br />
$query = $this->db->get("entradas", 10, 20);</p>
<p>// Genera: SELECT * FROM entradas LIMIT 20,10<br />
[/code]</p>
<h2>SELECT</h2>
<p>También podemos especificar el SELECT con $this->db->select(); tipo:<br />
[code lang="php"]<br />
$query = $this->db->select("id,title,body");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT id,title,body FROM entradas<br />
[/code]</p>
<p>Existen algunas funciones de MySQL que tienen una propiedad de <em>SELECT</em> específica en <a href="http://www.codeigniter.com">CodeIgniter</a>, sin embargo, solo los listaré ya que no los usaremos en aplicaciones básicas:</p>
<ul>
<li><em>$this->db->select_max();</em></li>
<li><em>$this->db->select_min();</em></li>
<li><em>$this->db->select_avg();</em></li>
<li><em>$this->db->select_sum();</em></li>
</ul>
<h2>JOIN</h2>
<p>Esto nos permite unir dos tablas tal que así:<br />
[code lang="php"]<br />
$query = $this->db->join("comentarios", "comentarios.id = entradas.id");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas JOIN comentarios ON comentarios.id = entradas.id<br />
[/code]</p>
<h2>WHERE</h2>
<p>[code lang="php"]<br />
$query = $this->db->where("id","38");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas WHERE id = '38'<br />
[/code]</p>
<p>Si quisiéramos podríamos unir varios WHERE, simplemente añadiendo otras condiciones:<br />
[code lang="php"]<br />
$query = $this->db->where("id","38");<br />
$query = $this->db->where("name","Isern");<br />
$query = $this->db->where("surname","Palaus");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas WHERE id = '38' AND name = 'Isern' AND surname = 'Palaus'<br />
[/code]</p>
<p>Pero claro, no todo son igualdades. Quizás queremos buscar una cosa que sea más pequeña que, o diferente, o mayor, etcétera. La forma es especificar en el primer campo, si no hay nada se tomará <em>=</em> por defecto:<br />
[code lang="php"]<br />
$query = $this->db->where("id >","38");<br />
$query = $this->db->where("name !=","Isern");<br />
$query = $this->db->where("surname","Palaus");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas WHERE id > '38' AND name != 'Isern' AND surname = 'Palaus'<br />
[/code]</p>
<p>Al igual que <strong>SELECT</strong>, hay muchas más propiedades:</p>
<ul>
<li><em>$this->db->or_where();</em></li>
<li><em>$this->db->where_in();</em></li>
<li><em>$this->db->or_where_in();</em></li>
<li><em>$this->db->where_not_in();</em></li>
<li><em>$this->db->or_where_not_in();</em></li>
</ul>
<h2>LIKE</h2>
<p>[code lang="php"]<br />
$query = $this->db->like("body","sentencia");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entras LIKE body = '%sentencia%'<br />
[/code]</p>
<p>Sin embargo, podría ser que no quisiéramos que las dos partes fueran aleatorias&#8230; De modo que podemos especificar en un tercer campo el <em>%</em> donde debe estar. Puede ser: <em>before</em>, <em>both</em> y <em>after</em>.<br />
[code lang="php"]<br />
$query = $this->db->like("body","sentencia1","before");<br />
$query = $this->db->like("title","sentencia2","both");<br />
$query = $this->db->like("slug","sentencia3","after");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas LIKE body = '%sentencia1' AND title = '%sentencia2%' AND slug = 'sentencia3%'<br />
[/code]</p>
<p>Otros tipos de <b>LIKE</b> que podemos usar son:</p>
<ul>
<li><em>$this->db->not_like();</em></li>
<li><em>$this->db->or_not_like();</em></li>
<li><em>$this->db->group_by();</em></li>
</ul>
<h2>GROUP BY</h2>
<p>En otras versiones se conocia como <em>$this->db->groupby();</em> pero ha sido eliminado.<br />
[code lang="php"]<br />
$query = $this->db->group_by("title");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas GROUP BY title<br />
[/code]</p>
<h2>DISTINCT</h2>
<p>Para añadir DISTINCT a la consulta:<br />
[code lang="php"]<br />
$query = $this->db->distinct();<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT DISTINCT * FROM entradas<br />
[/code]</p>
<h2>HAVING</h2>
<p>[code lang="php"]<br />
$query = $this->db->having("uid = 32");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas HAVING uid = 32<br />
[/code]</p>
<p>También es posible usar <em>$this->db->or_having();</em></p>
<h2>ORDER BY</h2>
<p><em>$this->db->order_by();</em> permite ordenar un resultado en una dirección especifica. En el primer parámetro especificamos el nombre de la columna y en el segundo la dirección. Las posibilidades del segundo parámetro son: <em>ASC</em>, <em>DESC</em> y <em>RANDOM</em>.<br />
[code lang="php"]<br />
$query = $this->db->order_by("id","DESC");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas ORDER BYid DESC<br />
[/code]</p>
<h2>LIMIT</h2>
<p>Permite especificar el limite de resultados que quieres que devuelva:<br />
[code lang="php"]<br />
$query = $this->db->limit(30);<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas LIMIT 10<br />
[/code]</p>
<h2>COUNT ALL</h2>
<p>Permite contar el numero de entradas que hay en una tabla:<br />
[code lang="php"]<br />
$num = $this->db->count_all("entradas");</p>
<p>// Genera: un numero que lo podemos tratar como una variable o escribirlo<br />
[/code]</p>
<h2>COUNT ALL RESULTS</h2>
<p>A diferencia de <strong>COUNT ALL</strong>, nos permite contar el numero de resultados en la actual consulta:<br />
[code lang="php"]<br />
$query = $this->db->where("name","Isern");<br />
$query = $this->db->get("entradas");</p>
<p>$num = $this->db->count_all_results();</p>
<p>// Genera: un numero<br />
[/code]</p>
<h2>INSERT</h2>
<p>Para insertar datos usando el Active Record de <a href="http://www.codeigniter.com">CodeIgniter</a> debemos usar un array luego insertar:<br />
[code lang="php"]<br />
$insert = array("title" => "Test",<br />
                     "body" => "Test",<br />
                     "name" => "Isern",<br />
                     "surname" => "Palaus");</p>
<p>$this->db->insert("entradas",$insert);</p>
<p>// Genera: INSERT INTO entradas (title, body, name, surname) VALUES ('Test', 'Test', 'Isern', 'Palaus')<br />
[/code]</p>
<h2>UPDATE</h2>
<p>Al igual que <strong>INSERT</strong> usaremos un array para insertar, sin embargo si queremos actualizar, por ejemplo, una entrada deberemos especificar un where:<br />
[code lang="php"]<br />
$update = array("title" => "Test",<br />
                      "body" => "Test",<br />
                      "name" => "Isern",<br />
                      "surname" => "Palaus");</p>
<p>$this->db->where("id","3");<br />
$this->db->update("entradas",$update);</p>
<p>// Genera: UPDATE entradas SET title = 'Test', body = 'Test', name = 'Isern', surname = 'Palaus' WHERE id = 3<br />
[/code]</p>
<h2>DELETE</h2>
<p>Al igual que UPDATE usaremos un ID para especificar cual es la que queremos borrar:<br />
[code lang="php"]<br />
$this->db->where("id","3");<br />
$this->db->delete("entradas");</p>
<p>// Genera: DELETE FROM entradas WHERE id = 3<br />
[/code]</p>
<p>Y esto es más o menos todo lo que nos ofrece <a href="http://www.codeigniter.com">CodeIgniter</a> para tratar nuestras bases de datos. Espero que haya servido de ayuda a más de uno ya que muchas visitas recibidas buscaban como usar MySQL en <a href="http://www.codeigniter.com">CodeIgniter</a>.</h2>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/consultas-mysql-en-codeigniter/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>AJAX Login con jQuery y Code Igniter (PHP)</title>
		<link>http://blog.ipalaus.es/ajax-login-con-jquery-y-code-igniter-php</link>
		<comments>http://blog.ipalaus.es/ajax-login-con-jquery-y-code-igniter-php#comments</comments>
		<pubDate>Fri, 07 Mar 2008 22:23:37 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ajax login]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/?p=1</guid>
		<description><![CDATA[Nueva versión del tutorial: AJAX Login con jQuery y CodeIgniter – v2 + archivos
Uno de los principales problemas a la hora de empezar a programar es que muchos usuarios necesitamos donde mirar por tal de tener una base para empezar nuestro programa. No es lo mejor a la larga porque siempre terminamos basando nuestro trabajo <a href="http://blog.ipalaus.es/ajax-login-con-jquery-y-code-igniter-php" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p><strong>Nueva versión del tutorial: <a href="http://blog.ipalaus.es/ajax-login-con-jquery-y-codeigniter-v2-archivos">AJAX Login con jQuery y CodeIgniter – v2 + archivos</a></strong></p>
<p>Uno de los principales problemas a la hora de empezar a programar es que muchos usuarios necesitamos donde mirar por tal de tener una base para empezar nuestro programa. No es lo mejor a la larga porque siempre terminamos basando nuestro trabajo en otros proyectos, pero es una buena forma de empezar a programar. En este caso explicaré como hacer un sistema que valide a lo usuarios mediante un formulario AJAX y el <em>framework</em> PHP <a href="http://www.codeigniter.com">Code Igniter</a>.</p>
<p>Lo primero que necesitamos en este caso es jQuery que podemos descargarlo desde <a href="http://www.jquery.com">la web oficial</a>. jQuery es una librería de JavaScript que nos facilita muchísimo las cosas a la hora de programar. Obviamente también necesitaremos Code Igniter y me reservo el derecho en publicar una entrada futura sobre el mismo.</p>
<p>Para empezar lo haremos con una cosa sencilla, la base de datos que vamos a usar. Es bien simple: id, usuario, contraseña, correo y hora de &#8220;registro&#8221;.</p>
<p>[code lang="mysql"]<br />
CREATE TABLE `users` (<br />
`uid` int(10) NOT NULL auto_increment,<br />
`username` varchar(16) NOT NULL,<br />
`password` varchar(32) NOT NULL,<br />
`email` varchar(128) NOT NULL,<br />
`time` int(10) NOT NULL,<br />
PRIMARY KEY (`uid`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=latin1;</p>
<p>[/code]</p>
<p>Ahora es hora del controlador que llamaré <strong>user.php</strong>, este user.php se ocupará de las funciones básicas como son: comprobar el usuario y la desconexión del mismo.</p>
<p>[code lang="php"]<br />
load-&gt;model("user_model");<br />
$this-&gt;load-&gt;model("dalia_model");</p>
<p>$this-&gt;load-&gt;helper("security");<br />
$this-&gt;load-&gt;helper("form");<br />
}</p>
<p>/* Checks if the password that the user gives is equal at the DB ones */<br />
function _check_login($username) {<br />
$password = md5($this-&gt;validation-&gt;password);</p>
<p>if(!$this-&gt;user_model-&gt;checkUserLogin($username,$password,"users"))<br />
return FALSE;</p>
<p>return TRUE;<br />
}</p>
<p>function index() {<br />
$this-&gt;load-&gt;view("userLogin");<br />
}</p>
<p>function checkLogin()<br />
{<br />
$this-&gt;load-&gt;library('validation');<br />
$rules['username'] = 'trim|required|callback__check_login';<br />
$rules['password'] = 'trim|required';<br />
$this-&gt;validation-&gt;set_rules($rules);</p>
<p>$fields['username'] = 'username';<br />
$fields['password'] = 'password';<br />
$this-&gt;validation-&gt;set_fields($fields);</p>
<p>if ($this-&gt;validation-&gt;run()) {<br />
$username     = $this-&gt;validation-&gt;username;<br />
$uid         = $this-&gt;user_model-&gt;getUserId($username,"users");</p>
<p>$this-&gt;session-&gt;set_userdata("logged_in",$uid);</p>
<p>$output = '{ "success": "yes", "welcome": "Welcome" }';<br />
} else {<br />
$output = '{ "success": "no", "message": "This is not working" }';<br />
}</p>
<p>$output = str_replace("\r", "", $output);<br />
$output = str_replace("\n", "", $output);</p>
<p>echo $output;<br />
}</p>
<p>function logout()<br />
{<br />
$this-&gt;session-&gt;sess_destroy();<br />
redirect("");<br />
}</p>
<p>}</p>
<p>?&gt;<br />
[/code]</p>
<p>Para el login en AJAX vamos a tener que usar una comprobación en PHP que la llamaremos mediante jQuery. Es tan simple como saber si el usuario que intentamos acceder es válido o no lo es. Esta función de comprobar el usuario es checkLogin() y la analizamos desde el principio. En primer termino nos encontramos con:</p>
<p>[code lang="php"]<br />
$rules['username'] = 'trim|required|callback__check_login';<br />
[/code]</p>
<p>Que hace una llamada a la función _check_login(). Es la función que realmente comprueba en al base de datos si el usuario existe o no en la misma:</p>
<p>[code lang="php"]<br />
function _check_login($username) {<br />
$password = md5($this-&gt;validation-&gt;password);</p>
<p>if(!$this-&gt;user_model-&gt;checkUserLogin($username,$password,"users"))<br />
return FALSE;</p>
<p>return TRUE;<br />
}<br />
[/code]</p>
<p>Lo primero que hacemos es obtener la contraseña y codificarla en md5, ya que es como reside en la base de datos. Mediante el modelo <em>user_model</em>, que analizaremos más adelante, comprobamos con el nombre de usuario y contraseña que el usuario ha ingresado si coinciden con los que corresponden. Si esto es verdad, y coinciden, devolveremos un <em>TRUE</em>&#8230; del contrario, <em>FALSE</em>.</p>
<p>El modelo que usamos para comprobar el usuario, llamado <strong>user_model.php</strong>, es muy sencillo. El código es el siguiente:</p>
<p>[code lang="php"]<br />
db-&gt;where("username",$username);<br />
$query = $this-&gt;db-&gt;where("password",$password);<br />
$query = $this-&gt;db-&gt;limit(1,0);<br />
$query = $this-&gt;db-&gt;get($table);</p>
<p>if ($query-&gt;num_rows() == 0) {<br />
return NULL;<br />
}</p>
<p>return TRUE;<br />
}<br />
}<br />
?&gt;<br />
[/code]</p>
<p>Simplemente devuelve <em>TRUE</em> o <em>FALSE</em> dependiendo de si son válidos los datos que pasamos a la función.</p>
<p>Una vez tenemos casi todo el código, es hora de la <em>View</em> donde mostraremos el formulario en AJAX. Tengo las vistas separadas de modo que pueda cargar un <em>header</em>, el contenido y un <em>footer</em>. Mi formulario irá al <em>header</em> pero podría funcionar en cualquier otro sitio.</p>
<p>[code lang="php"]</p>
<p><!-- Extra Head Content --></p>
<p><!-- Extra Head Content --></p>
<div id="content">
<div id="header">
<div id="logo"><img src="&lt;?=base_url();?&gt;content/img/logo.png" alt=" " width="321px" height="111px" /></div>
<div id="login">session-&gt;userdata('logged_in')) {<br />
?&gt;</p>
<div id="logged">Welcome, you're already logged In.</div>
<div id="loginform">'userlogin'));?&gt;<br />
<label for="username">Username:</label></p>
<input id="username" class="logininput" name="username" type="text" />
<label for="password">Password:</label></p>
<input id="password" class="logininput" name="password" type="password" />
<input class="loginsubmit" type="submit" value="Login" /></div>
</div>
</div>
<div id="body">[/code]</p>
<p>Como comprobaciones en medio de la vista nos podemos dar cuenta de la siguiente:</p>
<p>[code lang="php"]<br />
if($this-&gt;session-&gt;userdata('logged_in')) {<br />
[/code]</p>
<p>Simplemente lo usamos para comprobar si es un usuario que ya ha logeado o si es un nuevo usuario. Si es nuevo, esta comprobación fallará y nos mostrará el nuevo formulario de login. No tiene ningún tipo de complicación. Lo que más puede generar dudas es el código de jQuery, que también es muy simple y son pocas lineas:</p>
<p>[code lang="javascript"]<br />
$(document).ready(<br />
function(){</p>
<p>$("#userlogin").ajaxForm({<br />
type: "POST",<br />
url: "/user/checkLogin",<br />
dataType: "json",<br />
data: "username="+$("#username").val()+"&amp;password;="+$("#password").val(),<br />
success: updateLogin<br />
});</p>
<p>}<br />
)<br />
[/code]</p>
<p>Para usar este tipo de llamada (ajaxForm) vamos a necesitar el plugin jQuery Form que podemos descargar desde la <a href="http://www.malsup.com/jquery/form/">página del autor</a>. Como curiosidad destacar el <em>success: updateLogin</em> que se encargará de actualizar nuestro formulario sin necesidad de cargar de nuevo la página. Esta es otra función a parte que llama una vez ha ejecutado el <em>script</em>. El código es el siguiente:</p>
<p>[code lang="javascript"]<br />
function updateLogin(data) {<br />
$('#logged').html('');<br />
$('#logged').hide();</p>
<p>$("#loginform").fadeOut("slow",<br />
function() {<br />
if (data.success == 'yes') {<br />
$('#logged').html(data.welcome).fadeIn("slow");<br />
}</p>
<p>if (data.success == 'no') {<br />
$('#loginerror').html(data.message).fadeIn("slow").fadeOut("slow",<br />
function() {<br />
$("#loginform").fadeIn("slow");<br />
}<br />
);<br />
}<br />
}<br />
);</p>
<p>}<br />
[/code]</p>
<p>Dependiendo de si el script PHP ha devuelto <em>success == yes</em> o <em>success == no</em>, ejecutará y actualizará de un modo o de otro. Los <em>data.welcome</em> o <em>data.message</em> son los mensajes que hemos enviado usando JSON a la hora de validar el script en el controlador <em>user.php</em>.</p>
<p>Bien, espero que con esto puedan crear su primer login en AJAX usando jQuery y PHP. Pronto, más sobre AJAX, PHP y CodeIgniter!</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/ajax-login-con-jquery-y-code-igniter-php/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>
