martes, 8 de febrero de 2011

Clase de conexión php-mysql

Bueno, como estaba aburrido y las clases de conexion con mysql y php no son muy completas o bien no se adaptan a mis necesidades, me dio por hacer esta que espero que a alguien le sirva de ayuda.


El codigo acontinuación.

<?php
class conSQL
{
private $usuarioDB='';
private $claveDB='';
private $hostDB='';
private $baseDB='';
public $consulta;
public $numfield;
public $affected;
public $numrows;
public $sql;
public $insertid;
private $conexion;

public function __construct($sql)
{
$this->sql = $sql;
}

private function conecta()
{
$this->conexion = @mysql_connect($this->hostDB,$this->usuarioDB,$this->claveDB) or die ("Base de datos en mantención.");
@mysql_select_db($this->baseDB);
return $this->conexion;
}

public function desconecta()
{
return mysql_close($this->conecta());
}

public function executeQuery()
{
$this->conecta();
$this->consulta = mysql_query($this->sql);
$this->numfield = mysql_num_fields($this->consulta);
$this->numrows = mysql_num_rows($this->consulta);
$this->desconecta();
$i=0;
$arreglo = array();
if ($rs = mysql_fetch_array($this->consulta)) {
do {
for ($j=0;$j<$this->numfield;$j++) {
$nombrecampo = mysql_field_name($this->consulta,$j);
$arreglo[$i][$nombrecampo] = $rs[$nombrecampo];
if ($j == $this->numfield) { $j = 0;}
}
$i++;
} while ($rs = mysql_fetch_array($this->consulta));
}
mysql_free_result($this->consulta);
return $arreglo;
}

public function executeUpdate()
{
$this->conecta();
$this->consulta = @mysql_query($this->sql);
$this->insertid = mysql_insert_id();
$this->affected = mysql_affected_rows();
$this->desconecta();
return $this->consulta;
}
}
?>

Modo de empleo:

Para este ejemplo simularemos una consulta tipo "SELECT" para que retorne algo, luego se mostrara una para el modo INSERT o UPDATE, que generalmente no retornan nada, excepto la cantidad de filas insertadas y/o actualizadas ah! y el ultimo insert realizado.

Ejemplo de SELECT.

require_once("/path/to/file/of/class/to/conexion.php");
$consulta="SELECT nombre,apellido FROM usuario";
$db = new conSQL($consulta);
$retorno = $db->executeQuery();
if ( $db->numrows > 0 )
{
foreach ( $retorno as $row )
{
echo $row['nombre']." ";
echo $row['apellido']."<br />";
}
}

?>

Ejemplo de UPDATE.
<?php

require_once("/path/to/file/of/class/to/conexion.php");
$consulta="UPDATE tbl1 SET apellido='macabeillo' WHERE nombre='juan'";
$db = new conSQL($consulta);
$db->executeUpdate();
if ( $db->affected > 0 ) // o tambien podria ser "if ( $db->affected )"
{
echo "El usuario ha sido actualizado";
}
?>

Ejemplo de INSERT.
<?php

require_once("/path/to/file/of/class/to/conexion.php");
$consulta="UPDATE tbl1 SET apellido='macabeillo' WHERE nombre='juan'";
$db = new conSQL($consulta);
$db->executeUpdate();
if ( $db->insertid > 0) // Al igual que UPDATE esto se puede hacer "if ( $db->insertid )
{
echo "El ultimo ingreso en la base de datos es: ".$db->insertid;
}

?>

martes, 5 de enero de 2010

Python y conexion a base de datos postgreSQL

Buscando información referente a las conexiones y querys de postgreSQL, me percate que no hay mayor detalle, como por ejemplo, recorrer una query a través de un SELECT...

Para este ejemplo se utilizara la API "psycopg2"

Bueno, rebuscandome una forma, encontre algo que quizas no sea muy elegante, pero el punto es que funciona...
A continuación les mostrare como.

# la variable argumentos contendria algo como esto:
# argumentos="host=localhost dbname=base_de_datos user=tu_usuario password=tu_clave port=5432"

class conexionSQL:
def __init__(self,argumentos=connectionString):
self.argumentos = argumentos

def select(self,query):
argumentos = self.argumentos
con = psycopg2.connect(argumentos)
cur = con.cursor()
cur.execute(query)
rows = cur.fetchall()
for row in range(len(rows)):
for campos in range(len(rows[row])):
print rows[row][campos]
cur.close()
con.close()

Creo que no hay mucho que agregar, pero el resultado seria:

campo1 campo2 campo3 campo4...
campo1 campo2 campo3 campo4...
campo1 campo2 campo3 campo4...

Saludos.

lunes, 20 de julio de 2009

*FIX* mod_rewrite: could not init rewrite log lock in child

Error al momento de enjaular apache y su respectiva solución.

Error
[crit] (2)No such file or directory: mod_rewrite: could not init rewrite log lock in child

Agregar esto

<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
</IfModule>

O esto:

<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 0
</IfModule>

Saludos.

jueves, 16 de julio de 2009

Pasar de extención nrg a iso en linux, cuando nrg2iso no funciona.

El otro dia me tope con la desagradable sorpresa al momento de intentar pasar una imagen nrg a iso con nrg2iso, lo cual desafortunadamente no funciono...

Buscando dentro de los repositorios de debian y/o ubuntu, encontre una aplicación llamada "iat" la cual cumple la misma función.

yo@mi-maquina:~$ apt-cache search iat && su root -c "apt-get install iat"
Password:

Y listo...
La forma de utilizar el programa, es a prueba de $%&/()!·$...
o sea...

yo@mi-maquina:~$ iat imagen.nrg nueva_imagen.iso

Saludos.

martes, 23 de junio de 2009

Problemas con locate + FreeBSD.

Uno de los problemas que me he encontrado al momento de leer foros de freebsd, es que en la mayoria de los casos no pueden utilizar el comando "locate", debido a que la forma de actualizar la base de datos interna, no es la misma que en linux.

Bueno, lo unico que tienen que hacer es ejecutar:

/usr/libexec/locate.updatedb

Aunque si quieren actualizar esto al modo linux, solo basta con hacer un simple enlace simbolico...

ln -s /usr/libexec/locate.updatedb /usr/bin/updatedb

Saludos.

lunes, 9 de marzo de 2009

Levantando un simple servidor DNS interno y externo con vistas.

Primero que todo "Hola", ya procedamos...
que necesitamos?
un servidor de nombre 2 tarjetas de red un cafe expreso sera suficiente, ya que este tema es bastante simple.

Instalando bind...
No explicare como hacerlo ya que es demasiado simple...
un ./configure --opciones && make && make install, y listo...

Antes de comenzar con la edición de los archivos debemos tener en cuenta o en su defecto saber que red interna tenemos...
En mi caso la "10.10.1.x".
Y como ip publica usaremos la 200.111.111.11.

Comenzamos la edición del corazon del dns...
en mi caso : "/etc/bind/named.conf"

Agregamos la siguiente vista interna:

view "internal" {
match-clients {10.10.1.0/24; 127.0.0.0/8;};
recursion yes;

zone "." {
type hint;
file "/etc/bind/db.root";
};

zone "dominio.cl" {
type master;
file "/etc/bind/internal.dominio.cl";
allow-transfer {any;};
allow-update {none;};
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
};

Ahora la vista "externa":

view "external" {
match-clients {any;};
recursion no;
zone "dominio.cl" {
type master;
notify yes;
file "/etc/bind/external.dominio.cl";
};
};

Cabe destacar que por motivos de seguridad tenemos denegado la recursion a las zonas externas.

Bien...
Ahora vamos por la configuración de los archivos en si.

primero internal.dominio.cl

$TTL 1D ; 1 day
@ IN SOA ns.dominio.cl. info.dominio.cl. (
2009022777 ; Serial number
1600 ;
300 ; 5 minutes retry
17280 ; 2 days expiry
43200) ; 12 hours minimum
IN NS ns.dominio.cl.
IN MX 10 mail.dominio.cl.
IN A 10.10.1.2
$ORIGIN dominio.cl.
ns A 10.10.1.2
mail A 10.10.1.1
www A 10.10.1.2

Aca le estamos diciendo que el servidor NS es la ip del servidor de nombre...
en mi caso: 10.10.1.2, el servidor de correo esta en la ip 10.10.1.1
y bueno...
el resto es deducible.

Ahora vamos con external.dominio.cl
$TTL 1D ; 1 day
@ IN SOA ns.dominio.cl. info.dominio.cl. (
2009022777 ; Serial number
1600 ;
300 ; 5 minutes retry
17280 ; 2 days expiry
43200
) ; 12 hours minimum

IN NS ns.dominio.cl.
IN MX 0 mail.dominio.cl.
IN A 200.111.111.111

$ORIGIN dominio.cl.
ns IN A 200.111.111.112
www IN A 200.111.111.112
mail IN A 200.111.111.111


Una vez tenemos todos nuestros registros agregado a los archivos, procedemos reiniciar el servicio...

Con el tipico "/etc/init.d/{bind,named} restart"
o si no con un simple "kill -9 $PID && named"

En fin...
eso es todo.

Saludos.

sábado, 7 de marzo de 2009

Fecha en php

El motivo de esta entrada, es que varias veces foreando, me he encontrado con la pregunta...
"Como pongo la fecha en español con la funcion date de php?".

Por ello, he creado un script simple, sin muchas lineas, las cuales les ayudaran para ello.

<?php
$meses=array(
"Janaury"=>"Enero",
"Febraury"=>"Febrero",
"March"=>"Marzo",
"April"=>"Abril",
"May"=>"Mayo",
"June"=>"Junio",
"July"=>"Julio",
"August"=>"Agosto",
"September"=>"Septiembre",
"October"=>"Octubre",
"November"=>"Noviembre",
"December"=>"Diciembre"
);

$semana=array(
"Monday"=>"Lunes",
"Tuesday"=>"Martes",
"Wednesday"=>"Miercoles",
"Thursday"=>"Jueves",
"Friday"=>"Viernes",
"Saturday"=>"Sabado",
"Sunday"=>"Domingo"
);
echo $meses[date("F")]." - ".$semana[date("l")];
?>

Al final aparece como usarlo...

por ejemplo si queremos imprimir en pantalla, hoy es sabado 7 de Marzo del 2009

solo tendriamos que escribir:

echo "hoy es ".$semana[date("l")]." de ".$meses[date("F")]." del ".date("Y");


Saludos.