<?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>HectorBenitez.com [Blog] &#187; Bases de datos</title> <atom:link href="http://blog.hectorbenitez.com/category/desarrollo_programacion/bases-de-datos/feed/" rel="self" type="application/rss+xml" /><link>http://blog.hectorbenitez.com</link> <description>Desarrollo de sistemas o algo por el estilo...</description> <lastBuildDate>Sun, 11 Dec 2011 22:25:49 +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>Old password authentication with MySQL</title><link>http://blog.hectorbenitez.com/2010/10/old-password-authentication-with-mysql/</link> <comments>http://blog.hectorbenitez.com/2010/10/old-password-authentication-with-mysql/#comments</comments> <pubDate>Thu, 21 Oct 2010 15:46:37 +0000</pubDate> <dc:creator>Hector Benitez</dc:creator> <category><![CDATA[Bases de datos]]></category> <category><![CDATA[Computación]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[PHPMyAdmin]]></category><guid isPermaLink="false">http://blog.hectorbenitez.com/?p=1726</guid> <description><![CDATA[MySQL a partir de su version 4.1 cambio la manera en la que almacena sus contraseñas, esto lo hizo para mejorar la seguridad, sin embargo, para mantener compatibilidad aun es posible manejar contraseñas con el viejo estilo, esto en muchos casos es transparente para los usuarios y los desarrolladores sin embargo, con el paso del [...]]]></description> <content:encoded><![CDATA[<p><a title="MySQL" href="http://blog.hectorbenitez.com/tag/mysql/">MySQL</a> a partir de su version 4.1 cambio la manera en la que almacena sus contraseñas, esto lo hizo para mejorar la <a title="seguridad" href="http://blog.hectorbenitez.com/category/computacion/seguridad/">seguridad</a>, sin embargo, para mantener compatibilidad aun es posible manejar contraseñas con el viejo estilo, esto en muchos casos es transparente para los usuarios y los desarrolladores sin embargo, con el paso del tiempo algunos clientes evolucionan y dejan de permitir el manejo de cuentas con &#8220;old passwords&#8221; , por ejemplo, si tu trabajas con PHP 5.3+ MYSQLND -enabled PDO MySQL Driver, recibiras un error que dice:<br /> mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.</p><p>SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD(&#8216;your_existing_password&#8217;). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file</p><p>Ademas de algunos warnings mas, segun el mensaje lo unico que tenemos que hacer es cambiar el password del usuario usando la funcion PASSWORD, o en caso de que uses <a title="phpMyAdmin" href="http://blog.hectorbenitez.com/tag/phpmyadmin/">phpMyAdmin</a> dando a la contraseña compatibilidad con MySQL 4.1+, que es una opción al momento de cambiar una contraseña.</p><p>En caso de que esto no funcione es posible que tengas algun otro problema con tu servidor MySQL, algunos puntos que debes checar son los siguientes:</p><ul><li>En la tabla mysql.user el campo password debe tener una longitud de 41, en caso de que tenga una longitud de 16 debes cambiarla, esto pasa generalmente en servidores que actualizaron desde una version anterior a 4.1.</li><li>Existe una variable de sistema llamada old_passwords que cambia el comportamiento de tu servidor y lo obligaria a siempre generar old passwords, existen 2 formas de comprobar si esta variable esta activa, la primera seria revisar las variables de MySQL (por ejemplo phpMyAdmin tiene un link a Variables en la pagina principal) o podrias ejecutar esto:</li></ul><blockquote><pre>SELECT PASSWORD("Algo")</pre></blockquote><p>El resultado esperado debe ser una cadena de 41 caracteres de largo que comienza con un *, en caso de que te regrese una cadena de 16 caracteres de longitud quiere decir que old_passwords esta activa, ahora, para solucionar esto existen 3 posibles acciones, quitar del comando con el que se inicia MySQL el parametro &#8211;old-passwords, poner en OFF la variable old_passwords de tu archivo de configuracion o usar el comando SET GLOBAL para poner en FALSE la variable de sistema.</p><p>Mas informacion en el <a href="http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html" target="_blank">sitio de MySQL</a></p><p>Algunos reportes en el sitio de <a href="http://bugs.php.net/bug.php?id=52799" target="_blank">PHP</a></p><p>Saludos&#8230;</p>]]></content:encoded> <wfw:commentRss>http://blog.hectorbenitez.com/2010/10/old-password-authentication-with-mysql/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Doctrine ORM: Inicio Rápido</title><link>http://blog.hectorbenitez.com/2010/02/doctrine-orm-inicio-rapido/</link> <comments>http://blog.hectorbenitez.com/2010/02/doctrine-orm-inicio-rapido/#comments</comments> <pubDate>Mon, 22 Feb 2010 18:13:39 +0000</pubDate> <dc:creator>Hector Benitez</dc:creator> <category><![CDATA[Bases de datos]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[doctrine]]></category> <category><![CDATA[orm]]></category><guid isPermaLink="false">http://blog.hectorbenitez.com/?p=671</guid> <description><![CDATA[Doctrine es un ORM(object relational mapper) que se ha vuelto muy popular en los últimos meses, la verdad es una herramienta que puede apoyar mucho nuestros desarrollos y es notable la cantidad de desarrolladores de Zend Framework o CodeIgniter que lo están incorporando, si bien, aprender Doctrine no es muy complejo, nunca está de más [...]]]></description> <content:encoded><![CDATA[<p><a title="Doctrine" href="http://blog.hectorbenitez.com/tag/doctrine/">Doctrine</a> es un ORM(object relational mapper) que se ha vuelto muy popular en los últimos meses, la verdad es una herramienta que puede apoyar mucho nuestros desarrollos y es notable la cantidad de desarrolladores de <a title="Zend Framework" href="http://blog.hectorbenitez.com/tag/zend-framework/">Zend Framework</a> o CodeIgniter que lo están incorporando, si bien, aprender Doctrine no es muy complejo, nunca está de más tener una guía de &#8220;Inicio Rápido&#8221;, y este post nos muestra de una manera muy sencilla como empezar a usar Doctrine&#8230; esta guía considera que Doctrine ya está funcionando en tu proyecto y de alguna manera sus clases están generadas(esto sería el paso 1, si creen que vale la pena podemos hacer un post al respecto)&#8230; de cualquier forma todo esto y mas se encuentra en la documentación de Doctrine, la cual esta en su <a href="http://www.doctrine-project.org/">sitio oficial</a>.</p><div><strong>Crear una conexión&#8230;</strong></div><pre class="brush: php">Doctrine_Manager::connection( "<a title="mysql" href="http://blog.hectorbenitez.com/tag/mysql/">mysql</a>://user:pass@server/db", 'myconn');</pre><div><strong>Insertar registros</strong></div><p>Objeto Record<br /> Esta es la forma más usada y sencilla. Cuando el método save es llamado el nuevo registro es creado&#8230;</p><pre class="brush: php">$u = new User();
$u-&gt;username = 'user';
$u-&gt;password = 'pass';
$u-&gt;save();</pre><p>Metodo fromArray()<br /> Existen ocasiones en los cuales los datos ya están en un arreglo.</p><pre class="brush: php">$data = array(
'username' =&gt; 'user',
'password' =&gt; 'pass',
'email' =&gt; 'mail@mail.com'
);
$u = new User();
$u-&gt;fromArray($data);
$u-&gt;save();</pre><p><span id="more-671"></span>Método flush() de Doctrine_Connection<br /> Cuando mandas llamar el método Doctrine_Connection::flush(), todos los objetos que no se han guardado se guardaran automáticamente, Doctrine ejecuta esto como una sola transacción.</p><pre class="brush: php">$u = new User();
$u-&gt;username = 'user';
$u-&gt;password = 'pass';
$u2 = new User();
$u2-&gt;username = 'foo';
$u2-&gt;password = 'bar';
$conn = Doctrine_Manager::connection();
$conn-&gt;flush();</pre><p>SQL<br /> También puedes crear una consulta de SQL y usarla a través de el método execute() de la clase Doctrine_Connection. El método execute soporta sustitución de valores usando el caracter &#8216;?&#8217;, y al usar esto automáticamente te proteges de SQL injection.</p><pre class="brush: php">
$data = array('user','pass');
$conn = Doctrine_Manager::connection();
$conn->execute('INSERT INTO user (username, password) VALUES (?,?)',  $data);
</pre><div><strong>Leer registros</strong</div><p>Estas operaciones hacen uso frecuente de los objetos Doctrine_Table los cuales pueden ser obtenidos llamando el método Doctrine::getTable() y como parámetro el nombre de la clase modelo, con los ejemplos se entenderá mejor.<br/><br /> Método find()<br /> El método find() hace una búsqueda a partir de la clave primaria de la tabla.</p><pre class="brush: php">
$user_id = 1;
$u = Doctrine::getTable('User')->find($user_id);
echo $u->username;
</pre><p>Método findOneBy*()<br /> Este es un método mágico al cual simplemente se le tiene que apendizar el nombre de la columna y buscara en la tabla a partir de esa columna. Este método solo obtiene un registro. Al usar estos métodos se debe capitalizar la primer letra de el nombre de la columna aunque este escrito con minúsculas&#8230;</p><pre class="brush: php">
$username = 'myuser';
$u = Doctrine::getTable('User')->findOneByUsername($username);
echo $u->username;
</pre><p>Método findBy*()<br /> Otro método mágico el cual funciona similar al anterior pero obteniendo múltiples registros.</p><pre class="brush: php">
$users = Doctrine::getTable('User')->findByRole('admin');
echo $users[0]->username;
echo $users[1]->username;
</pre><p>DQL<br /> Doctrine Query Language es una de las características mas fuertes de Doctrine, en este ejemplo crearemos un objeto query y a partir de ahí se irá generando la consulta, este ejemplo es muy básico pero se entenderá fácilmente, después de ejecutar la consulta nos regresara un objeto Doctrine_Collection.</p><pre class="brush: php">
$role = 'admin';
$q = Doctrine_Query::create()
->select('username')
->from('User')
->where('role = ?', $role)
->limit(20);
$users = $q->execute();
echo $users[0]->username;
echo $users[1]->username;
</pre><p>Método toArray()<br /> El objetos Doctrine_Record tiene un método toArray() el cual nos permitirá obtener un arreglo asociativo a partir de un Doctrine_Record&#8230;</p><pre class="brush: php">
$user_id = 1;
$u = Doctrine::getTable('User')->find($user_id);
$u_arr = $u->toArray();
print_r($u_arr);
</pre><div><strong>Actualizar registros</strong></div><p>Objeto Record<br /> Puedes hacer cualquier cantidad de cambios a un objeto, al llamar el método save() se actualizara en la base de datos&#8230;</p><pre class="brush: php">
$user_id = 1;
$u = Doctrine::getTable('User')->find($user_id);
$u->password = 'newpass';
$u->save();
</pre><p>DQL<br /> Cuando quieres actualizar muchos registros a la vez esta es una opción muy recomendada, en este ejemplo el método execute() regresa el numero de registros afectados&#8230;</p><pre class="brush: php">
$status = 'active';
$q = Doctrine_Query::create()
->update('User')
->set('status', '?', $status)
->where('id < 5');
$numrows = $q->execute();
echo "$numrows records updated";
</pre><div><strong>Borrar registros</strong></div><p>Objeto Record</p><pre class="brush: php">
$user_id = 1;
$u = Doctrine::getTable('User')->find($user_id);
$u->delete();
</pre><p>DQL<br /> Al igual que en la actualización esta es una opción para la eliminación, en este ejemplo el método execute() regresa el numero de registros eliminados&#8230;</p><pre class="brush: php">
$q = Doctrine_Query::create()
->delete('User')
->where('id < 5');
$numrows = $q->execute();
echo "$numrows records deleted";
</pre><p>Pues esto es todo por hoy, espero sea de ayuda y les permita comenzar a usar Doctrine aquí nos falto tocar el tema de la configuración de Doctrine pero la verdad es que no es muy complicado, como sea si alguien tiene algún problema no dude en consultar, ojala y pueda ayudarlos&#8230; saludos</p>]]></content:encoded> <wfw:commentRss>http://blog.hectorbenitez.com/2010/02/doctrine-orm-inicio-rapido/feed/</wfw:commentRss> <slash:comments>9</slash:comments> </item> <item><title>Administrador web para MySQL en un solo archivo: Adminer</title><link>http://blog.hectorbenitez.com/2009/09/administrador-web-para-mysql-en-un-solo-archivo-adminer/</link> <comments>http://blog.hectorbenitez.com/2009/09/administrador-web-para-mysql-en-un-solo-archivo-adminer/#comments</comments> <pubDate>Thu, 24 Sep 2009 20:42:36 +0000</pubDate> <dc:creator>Hector Benitez</dc:creator> <category><![CDATA[Bases de datos]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[PHPMyAdmin]]></category><guid isPermaLink="false">http://blog.hectorbenitez.com/?p=497</guid> <description><![CDATA[Adminer es un administrador para MySQL del tipo de PHPMyAdmin, pero tiene una característica muy especial, usa un solo archivo, esto lo hace muy sencillo de instalar y distribuir, está listo para ser usado en 11 lenguajes entre ellos español y es fácilmente skineable usando CSS&#8230; Usa las versiones PHP 4.3+ y  MySQL 4.1+. Sitio [...]]]></description> <content:encoded><![CDATA[<p>Adminer es un administrador para <a title="MySQL" href="http://blog.hectorbenitez.com/tag/mysql/">MySQL</a> del tipo de <a title="PHPMyAdmin" href="http://blog.hectorbenitez.com/tag/phpmyadmin/">PHPMyAdmin</a>, pero tiene una característica muy especial, usa un solo archivo, esto lo hace muy sencillo de instalar y distribuir, está listo para ser usado en 11 lenguajes entre ellos español y es fácilmente skineable usando CSS&#8230;</p><p><a href="http://blog.hectorbenitez.com/wp-content/uploads/2009/09/php-mysql-admin-script.gif"><img class="aligncenter size-full wp-image-498" title="php-mysql-admin-script" src="http://blog.hectorbenitez.com/wp-content/uploads/2009/09/php-mysql-admin-script.gif" alt="php-mysql-admin-script" width="480" height="65" /></a></p><p>Usa las versiones PHP 4.3+ y  MySQL 4.1+.</p><p><a href="http://www.adminer.org/en/" target="_blank">Sitio oficial&#8230;</a></p>]]></content:encoded> <wfw:commentRss>http://blog.hectorbenitez.com/2009/09/administrador-web-para-mysql-en-un-solo-archivo-adminer/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 1/22 queries in 0.009 seconds using disk: basic
Object Caching 527/563 objects using disk: basic

Served from: blog.hectorbenitez.com @ 2012-02-07 02:19:15 -->
