Archivo

Archivo para la categoría ‘MySQL’

Mas de 120 Herramientas y Recursos Para El Desarrollo Web

Lunes, 20 de Agosto de 2007 Neozeratul Sin comentarios

Esta recopilación hecha por Mashable ya tiene un tiempecito que se publicó pero vale la pena mencionarla y es que esta ves se trata de una recopilación de mas de 120 herramientas y recursos para los desarrolladores web, y como yo soy uno de ellos esta lista se me hace muy interesante y  muy útil y me ha permitido descubrir nuevos sitios y herramientas para posteriores tareas. Asi que les recomiendo guardar el enlace nunca se sabe cuando nos puedan ayudar.

La lista contiene las siguientes categorías:

Recursos Generales y Referencias.

  • Herramientas generales de desarollo.
  • Constructores de Aplicaciones.
  • Repositorios y Buscadores de Código y Snippets.
  • Ambientes de desarollo y FrameWorks
  • APIs y Mashups
  • Pruebas, Seguimiento de Errores y Administración de Proyectos.
  • Recursos y Herramientas para Ruby y Ruby on Rails.
  • Herramientas y Recursos de Ajax.
  • Herramientas y Recursos para PHP.
  • Herramientas y Recursos para Flash.
  • Herramientas y Recuros para Python.

Como ven la lista esta bastante completa y es seguro que alguno de esos sitios nos sirve de algo.

Enlace: Web Development Toolbox: 120+ Web Development Resources

Fuente: Webadictos

Categories: AJAX, CSS, INTERNET, MySQL, NOTICIAS, PHP, PROGRAMACION Tags:

5 Expresiones Regulares Muy Útiles para El Desarrollador Web

Jueves, 9 de Agosto de 2007 Neozeratul Sin comentarios

En Sentido Web han publicado 5 expresiones regulares que nos pueden ser útiles a todos los desarrolladores web y es que con una sola expresion regular bien implementada podemos ahorrarnos varias lineas de código.

Comprobar que una cadena solo contenga carateres alfanumericos y que la longitud este entre 3 y 16.

  1. /^[a-zA-Z0-9_]{3,16}$/

Ejemplo de Uso en PHP

  1. function validate_username( $username ) {

  2. if(preg_match(‘/^[a-zA-Z0-9_]{3,16}$/’, $_GET[‘username’])) {

  3. return true;

  4. }

  5. return false;

  6. }

Encontrar una etiqueta XHTML o XML

  • {<tag[^>]*>(.*?)</tag>}

Etiqueta XHTML o XML con atributos

  • {<tag[^>]*attribute\s*=\s*([”‘])value\\1[^>]*>(.*?)</tag>}

Verificar Dirección de Correo Electrónico (Email)

  1. function is_valid_email_address($email){

  2. $qtext = ‘[^\x0d\x22\x5c\x80-\xff]’;

  3. $dtext = ‘[^\x0d\x5b-\x5d\x80-\xff]’;

  4. $atom = ‘[^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c’.

  5. \x3e\x40\x5b-\x5d\x7f-\xff]+’;

  6. $quoted_pair = \x5c[\x00-\x7f]’;

  7. $domain_literal = \x5b($dtext|$quoted_pair)*\x5d”;

  8. $quoted_string = \x22($qtext|$quoted_pair)*\x22″;

  9. $domain_ref = $atom;

  10. $sub_domain = “($domain_ref|$domain_literal)”;

  11. $word = “($atom|$quoted_string)”;

  12. $domain = “$sub_domain(\x2e$sub_domain)*”;

  13. $local_part = “$word(\x2e$word)*”;

  14. $addr_spec = “$local_part\x40$domain”;

  15.  

  16. return preg_match(“!^$addr_spec$!”, $email) ? 1 : 0;

  17. }

Validar URL 

  1. {

  2. \b

  3. # Match the leading part (proto://hostname, or just hostname)

  4. (

  5. # http://, or https:// leading part

  6. (https?)://[-\w]+(\.\w[-\w]*)+

  7. |

  8. # or, try to find a hostname with more specific sub-expression

  9. (?i: [a-z0-9] (?:[-a-z0-9]*[a-z0-9])? \. )+ # sub domains

  10. # Now ending .com, etc. For these, require lowercase

  11. (?-i: com\b

  12. | edu\b

  13. | biz\b

  14. | gov\b

  15. | in(?:t|fo)\b # .int or .info

  16. | mil\b

  17. | net\b

  18. | org\b

  19. | [a-z][a-z]\.[a-z][a-z]\b # two-letter country code

  20. )

  21. )

  22.  

  23. # Allow an optional port number

  24. ( : \d+ )?

  25.  

  26. # The rest of the URL is optional, and begins with /

  27. (

  28. /

  29. # The rest are heuristics for what seems to work well

  30. [^.!,?;\’&lt;&gt;()[]{}sx7F-\xFF]*

  31. (

  32. [.!,?]+ [^.!,?;”\���&lt;&gt;()\[\]{\}s\x7F-\xFF]+

  33. )*

  34. )?

  35. }ix

Categories: MySQL, PROGRAMACION Tags:

Sentencias en MySQL Que Tal Ves No Conocias

Jueves, 9 de Agosto de 2007 Neozeratul 1 comentario

MySQL Query Browser viene una lista de funciones separadas por tipos que nos pueden ser de mucha utilidad y que muchas veces ni siquiera sabemos que existen, bien pues me dispuse a revisar las funciones que me presentaba dicha lista y me encontre con que mySQL nos puede ahorrar lineas de código si sabemos utilizarlo.Algunas sentencias que me encontre son las siguientes:

Funciones para el control de flujo

Sentencia IF

Algo que nos puede ser util cuando trabajamos con banderas, se me ocurre por ejemplo cuando tenemos un campo llamado publicado donde 0=No publicado y 1= Publicado a nosotros nos interesara mostrar en pantalla un texto y no el valor (0,1) de la bandera bien podriamos hacer una consulta como la siguiente:

  1. SELECT IF(t.publicado=1,‘Si’,‘No’) AS publicado FROM tabla t;

CASE

Creo que todos los que hemos programado sabemos para que es un case por lo que obviare la explicación.

Sintaxis:

CASE [valor] WHEN [condicion] THEN resultado [WHEN [condicion] THEN resultado…] [ELSE resultado] END

Ejemplo de Uso:

  1. SELECT CASE WHEN 1&gt;0 THEN ‘mayor’ ELSE ‘menor’ END;

Nos imprimiría en pantalla “mayor”

Otro ejemplo:

  1. SELECT CASE 1 WHEN 1 THEN ‘uno’ WHEN 2 THEN ‘dos’ ELSE ‘otro’ END;

Nos imprimiría en pantalla “uno”

Operaciones Con Cadenas

CHAR()
Interpreta cada argumento N como un entero y devuelve una cadena que consiste en lo valores en ascii de dichos enteros. Los valores nulos no son tomados en cuenta.

Sintaxis: CHAR(N,…)

Ejemplo:

  1. SELECT CHAR(77,121,83,81,‘76′);

Imprime en pantalla “MySQL”

CONCAT

Te devuelve la cadena resultante de concatenar los argumentos pasados en la función. Puede tener mas de un argumento.

Sintaxis: CONCAT(cadena1,cadena2,…)

Ejemplo de uso:

  1. SELECT CONCAT(‘My’, ‘S’, ‘QL’);

Imprime: MySQL

  1. SELECT u.usuario, CONCAT(u.ciudad,‘, ‘,u.estado,‘, ‘,u.pais) AS localizacion FROM usuarios u;

Mostrará en pantalla un listado de los usuarios junto con un campo localización que es el resultado de concatenar ciudad, estado y pais.

REPLACE

Sintaxis: REPLACE(cadena,cadena_buscada,valor_para_reemplazar)

Devuelve una cadena con todas las ocurrencias de ‘cadena_buscada’ reemplazadas por ‘valor_para_reemplazar’

Ejemplo:

  1. SELECT REPLACE(‘www.mysql.com’, ‘w’, ‘Ww’);

Imprime: ‘WwWwWw.mysql.com’

TRIM

Una función que seguramente la mayoria de nosotros hemos utilizado en php o su equivalencia en algun otro lenguaje, MySQL tambien nos la proporciona y yo para ser sincero ni lo sabia.

Sintaxis: TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)

Devuelve la cadena str con todos los prefijos o sufijos remstr eliminados. Si ninguno de los parametros BOTH, LEADING, or TRAILING es proporcionado,
se asume el parámetro BOTH. remstr es opcional y, si ninguno es especificado, todos los espacios en blanco son removidos.

Ejemplo:

  1. SELECT TRIM(‘  cadena   ’);

Imprime: cadena

  1. SELECT TRIM(LEADING ‘a’ FROM ‘aaavaloraaa’);

Imprime: valoraaa

  1. SELECT TRIM(BOTH ‘a’ FROM ‘aaavaloraaa’);

Imprime: valor

  1. SELECT TRIM(TRAILING ‘xyz’ FROM ‘cadenaxxyz’);

Imprime: cadena

REPEAT

Sintaxis: REPEAT(str,n)

Devuelve una cadena que consiste en la cadena str repetida n veces. Si n es menor que 1, devuelve una cadena vacia. Devuelve NULL si str o n son NULL

Ejemplo:

  1. SELECT REPEAT(‘MySQL’, 3);

Imprime MySQLMySQLMySQL

Operaciones con Fechas

Muchas veces tenemos una fecha y deseamos calcular una fecha sumando o restandole cierto número de dias para esto tenemos una sentencia de MySQL que nos permite hacer eso.

DATE_ADD y DATE_SUB

Sintaxis: DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

Estas funciones ejecutan funciones aritmeticas sobre la fecha. date es un valor DATETIME o DATE especificando la fecha de inicio. expr es una expresion especificando el valor del intervalo a ser sumado o restado de la fecha de inicio. expr es una cadena; puede comenzar con un signo ‘-’ para los intervalos negativos. unit es una palabra clave indicando la unidad en la cual la expresion debe ser interpretada.

Los siguientes son los valores que puede tener el parametro expr unit.

unit Valor Formato para expr
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

Ejemplos:

  1. SELECT ‘1997-12-31 23:59:59′ + INTERVAL 1 SECOND;

  2. #IMPRIME ‘1998-01-01 00:00:00′

  3. SELECT INTERVAL 1 DAY + ‘1997-12-31′;

  4. #IMPRIME ‘1998-01-01′

  5. SELECT ‘1998-01-01′ – INTERVAL 1 SECOND;

  6. #IMPRIME ‘1997-12-31 23:59:59′

  7. SELECT DATE_ADD(‘1997-12-31 23:59:59′,INTERVAL 1 SECOND);

  8. #IMPRIME ‘1998-01-01 00:00:00′

  9. SELECT DATE_ADD(‘1997-12-31 23:59:59′,INTERVAL 1 DAY);

  10. #IMPRIME ‘1998-01-01 23:59:59′

  11. SELECT DATE_ADD(‘1997-12-31 23:59:59′,INTERVAL ‘1:1′ MINUTE_SECOND);

  12. #IMPRIME ‘1998-01-01 00:01:00′

  13. SELECT DATE_SUB(‘1998-01-01 00:00:00′,INTERVAL ‘1 1:1:1′ DAY_SECOND);

  14. #IMPRIME ‘1997-12-30 22:58:59′

  15. SELECT DATE_ADD(‘1998-01-01 00:00:00′,INTERVAL ‘-1 10′ DAY_HOUR);

  16. #IMPRIME ‘1997-12-30 14:00:00′

  17. SELECT DATE_SUB(‘1998-01-02′, INTERVAL 31 DAY);

  18. #IMPRIME ‘1997-12-02′

  19. SELECT DATE_ADD(‘1992-12-31 23:59:59.000002′,INTERVAL ‘1.999999′ SECOND_MICROSECOND);

  20. #IMPRIME ‘1993-01-01 00:00:01.000001′

  21.  

Estas son algunas de las funciones que me parecieron que pudieran servirnos mas a menudo y que nos evitarian un poco de lineas de código en nuestra programación, espero les sirvan de algo.

Actualización:

INSERT IGNORE

Sintaxis: INSERT IGNORE INTO tabla (campo1,campo2) VALUES (valor1,valor)

Intenta insertar, pero ignora los posibles errores que se puedan producir, por ejemplo, como consecuencia de alguna PRIMARY KEY duplicada.
Ejemplo:
INSERT IGNORE into tabla(id) VALUES (3);

Si el valor 3 correspondia al campo de la clave primaria y dicho valor ya existía en la tabla, no se producirá un error (como es el caso del INSERT “normal”), sino que sencillamente se insertarán 0 filas y no devolverá ningún error.

INSERT … ON DUPLICATE KEY UPDATE

Si especificamos ON DUPLICATE KEY UPDATE en nuestra consulta, y una fila es insertada que puede causar duplicidad con alguna llave primaria o indice unico en nuestra tabla, se realiza una actualización al registro.

Ejemplo:

  1. INSERT INTO TABLE (a,b,c) VALUES (1,2,3)   ON DUPLICATE KEY UPDATE c=c+1;

  2.  

  3. #Seria lo mismo que hacer una consulta update como la siguiente

  4.  

  5. UPDATE TABLE SET c=c+1 WHERE a=1;

Saludos.

Categories: MySQL, PROGRAMACION Tags:

Usando expresiones regulares con MySQL

Jueves, 9 de Agosto de 2007 Neozeratul Sin comentarios

MySQL es un gran motor de bases de datos y pese a ser uno de los más usados en la red, no se le aprovecha todo su potencial. Hoy Hector nos comentaba como pulir nuestro server MySQL para conseguir optimizar el rendimiento de nuestro servidor. De esta forma nos acercabamos un poco más a la parte más técnica del motor de base de datos.Ahora vamos a ver un herramienta que el propio lenguaje SQL sobre MySQL nos permite facilitarnos la vida a todos los que trabajamos con este tipo de bases de datos, la implementación RegExp, o expresiones regulares.

Las expresiones regulares

Las expresiones regulares son algo que siempre se me ha atragantado, debe de ser por el concepto abstracto del que se componen o por que tampoco de dedicaba el tiempo que se merecian. Pero fue pasando el tiempo y poco a poco, por motivo laborales no hubo más remedio que plantarles cara, y apesar de ser algo que produce una curva de aprendizaje algo más elevada que usar botijo, el resultado es abrumador.

Si eres un usuario de Linux, medio-avanzado, serás un experto en ellas ya que grep (la herramienta por excelencia de Linux) junto las expresiones regulares son de lo más útil que te puedas imaginar.

En definitiva, llamamos expresión regular a un conjunto de caracteres que forman un patrón al que le aplicaremos una serie de elementos y comprobaremos si dicho patrón concuerda con alguno de los elementos aplicados.

En resumen, un sistema muy util para buscar coincidencias en varios elementos.

Expresiones Regulares y MySQL

Partiendo de la definición anterior, sacamos que se trata de buscar, y ¿que mejor para buscar que MySQL?

Cualquier motor de bases de datos que implemente SQL, usará una proporción descomunal de SELECT (consultas) frente a INSERT INTO (insercción de datos), por este motivo nacen las expresiones regulares para este lenguaje (SQL). Con ellas podemos definir patrones para perfeccionar las busquedas en nuestras bases de datos.

Veamos unos ejemplos:

Patrón básico

SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;

Esta expresión REGEXP '1000', no filtrará todos los resultados de la tabla products en los que el campo prod_name contenga el valor 1000.

Como podemos ver esto es fácil, pero la cosa se puede complicar.

Patrón con punto

SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;

En este ejemplo ya vemos como la expresión regular empieza a usar carácteres “raros”. Estos carácteres tienen un valor preestablecido para hacer las busquedas más genéricas, de modo que en este ejemplo obtendremos todas las filas de la tabla cuyo prod_name contenga algún valor como 1000, 2000, 3000,…pero tambien x000, d000,…
De aqui entonces podemos sacar que el (.) es el un carácter especial que indica que puede ser reemplazado por cualquier otro carácter. Pero tambien podemos necesitar que dichos carácteres se repitan un número definido o no de veces.

* 0 o más veces
+ 1 o más veces
? 0 o 1
{n} n veces
{n,} n o más veces
{n,m} Se especifica un rango entre n y m

Evidentemente estos carácteres tambien son carácteres válidos para nuestras busquedas y pueden formar parte de nuestros datos, por ese motivo hemos de escaparlos. Para ello usaremos la barra invertida doble.

	SELECT vend_name FROM vendors WHERE vend_name REGEXP '.' ORDER BY vend_name;

De esta forma obtendremos los resultados que contengan un punto en su campo vend_name. ¿Y como se escapa la barra invertida? Pues como si se tratara de otro carácter a escapar (\\\).

Patrón con inicio y fin

	SELECT prod_name FROM products WHERE prod_name REGEXP '^1000' ORDER BY prod_name; 

Otro carácter especial que debemos conocer es el de (^) que se encarga de indicar que el partrón se inicia al iniciar la línea, de esta forma obtendremos resultados como “1000 caballos ...” pero no “los 1000 caballos...“.

Pero no solo podemos controlar el inicio del texto, tambien tenemos operadores para depurar más nuestro patrón.

^ Inicio del texto
$ Fin del texto
[[:<:]] Inicio de la palabra
[[:>:]] Fin de la palabra

Patrón condicional

	SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;

La pipe (|) indica que el patrón puede estar formado por 1000 o por 2000, y nada más.

Patrón con varios carácteres condicionales

	SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;

[123] nos indica que en la posición en la que se encuentra únicamente podrá haber un 1, un 2 o un 3, y ningún carácter más. Esto es muy util para controlar rangos de carácteres, por ejemplo solo números [0-9] o solo minúsculas [a-z].

Para mejorar el trabajo de los desarrolladores se crearon una serie de variables para definir algunos de estos patrones de forma cómoda y rápida.

[:alnum:] [a-zA-Z0-9]
[:alpha:] [a-zA-Z]
[:blank:] [\\t ]
[:cntrl:] Carácteres de control (ASCII 0 hasta 31 y 127)
[:digit:] [0-9]
[:graph:] [:print:] sin contar el espacio
[:lower:] [a-z]
[:print:] Carácteres imprimibles
[:punct:] Carácteres no comprendidos en [:alnum:] ni en [:cntrl:]
[:space:] [\\f\\n\\r\\t\\v ]
[:upper:] [A-Z]
[:xdigit:] [a-fA-F0-9]

Conclusión

Conociendo esto podemos definir un patrón lo más ajustado posible a nuestra busqueda, haciendo que nuestros resultados sean los que realmente queremos obtener. Un poco de paciencia y tiempo y cualquiera puede controlar esta tran propiedad de MySQL.

Categories: MySQL, PROGRAMACION Tags:

20 Recursos MySQL

Jueves, 9 de Agosto de 2007 Neozeratul Sin comentarios

Una buena lista de aplicaciones, enlaces, recursos, tutoriales sobre MySQL que nos pueden ayudar a trabajar con esta base de datos.

Herramientas de diseño y administración

  • MyDB Studio: aplicación para administracion de MySQL con alguna utilidad para diseño.
  • SQLYog: excelente GUI para diseño y administración de bases de datos MySQL.
  • WWW SQL Designer: diseñador Ajax, tiene muchas características que normalmente solo están disponibles en aplicaciones offline.
  • OpenOffice.org Base: aunque es inusual, realmente tiene un buen soporte para trabajar con MySQL.
  • AutoMySQLBackup: para la creación de scripts para realizar backups.
  • PHPMyAdmin: el más famoso de los administradores de MySQL vía web.

Herramientas de seguridad

  • SQLIer: Herramienta para SQL Injection que indicando una URL, intenta hacer todo lo posible para realizar SQL Injection.
  • SQLMap: Otra utilidad para SQL Injection que admite MySQL, PostgreSQL y MSSQL.
  • Absinthe: utilidad disponible para Linux y Windows que intenta forzar tu servidor con ataques SQL injection.
  • SQID: SQL Injection mediante línea de comandos creado con Ruby.

Optimización

Conocimientos

20 Indispensible MySQL Resources

Relacionados

Categories: MySQL, PROGRAMACION Tags: