Programación Web y Scripting > PHP
Problema con script en PHP
RadicalEd:
Si vas a usar paginador te funcionará, es más es algo que les falta a mis clases.
JrcsDev:
Aquí les dejo la clase que hice para mysql:
--- Código: PHP ---class FMysql{ var $host; var $pass; var $user; var $link; var $numQuerys=0; var $db; function __construct($host,$user,$pass,$db) { $this->user=$user; $this->pass=$pass; $this->host=$host; $this->db=$db; $this->link=mysql_connect($this->host,$this->user,$this->pass); mysql_select_db($this->db,$this->link); } function query($sql) { $this->numQuerys++; return new FMysqlObjectDB($sql,$this->link); }} class FMysqlObjectDB{ var $regs; var $res; var $pos; var $data; function __construct($sql,$link) { @$this->res=mysql_query($sql,$link); $this->regs=mysql_num_rows($this->res); if (mysql_error()) { echo "<div style="border:1px solid gray;font-family:Helvetica;font-size:11px;width:200px;background-color:#FFFF99;"> <b>Error (".mysql_errno()."):</b> ".mysql_error(). "</div>"; exit(); } $this->pos=0; } function numRegistros() { return $this->regs; } function getFila() { if ($this->regs>0 && $this->pos<$this->regs) { mysql_data_seek($this->res,$this->pos); $this->data=mysql_fetch_array($this->res); $this->pos++; return $this->data; } else { $this->pos=0; return false; } } function __get($nombre) { return $this->data[$nombre]; }}
Y la forma de implementarlo sería:
--- Código: PHP ---$SQL=new FMysql("localhost","root","","datos"); //Forma 1$rs1=$SQL->query("select id,nombre from vt_clientes order by id");while ($rs1->getFila()){ echo "Id: ".$rs1->id; echo "<br>Nombre: ".$rs1->nombre; echo "<br>"; } //Forma 2$rs2=$SQL->query("select id,nombre from vt_clientes order by id");while ($dat=$rs2->getFila()){ echo "Id: ".$dat['id']; echo "<br>Nombre: ".$dat['nombre']; echo "<br>"; }
La forma 1 es implementando métodos mágicos, y la forma 2 es similar a la normal de mysql...
Para ingresar y eliminar:
--- Código: PHP ---$SQL->query("insert into personas (nombre,apellido) values ('pedro','perez')");$SQL->query("delete from personas where id=1");
De igual forma se hace para actualizar. Le faltan otras cosas como un método que devuelva el último id...
DriverOp:
Bien pues, para controlar errores se me ha ocurrido lo siguiente.
--- Código: PHP --- /* Nuevas propiedades */ public $errmsg = ""; public $error = false; public $errno = 0; private function VerifError() { // No es necesario que sea accesible desde afuera $this->errno = mysql_errno(); $this->error = $this->errno != 0; $this->errmsg = $this->errno.": ".mysql_error(); return $this->error;} Luego en cada método suceptible de experimentar un error agregar este código, por ejemplo al conectar...
--- Código: PHP --- private function conectar_base_datos() { $this->descriptor = mysql_connect($this->servidor,$this->usuario,$this->pass); if (!$this->VerifError()) { mysql_select_db($this->base_datos,$this->descriptor); $this->VerifError(); }} Y se usaría (usando el ejemplo de ale992):
--- Código: PHP --- $usuario = new db();if (!$usuario->error) { // trajabar con la base de datos} else { echo $usuario->$errmsg; // Mostrar el mensaje de error.} Y así con el resto de los métodos.
También se me ha ocurrido agregar métodos específicos para hacer Insert, Update y Delete sin tener que escribir toda la sentencia completa sino pasándole los parámetros propios, obligatorios y opcionales a través de métodos de la clase; pero quedará para un próximo aporte :)
RadicalEd:
Lo maluco de los metodos propios para INSERT, DELETE Y UPDATE es que al pasarle los parámetros solo estarías ahorrando muy poco de código, por que debes pasar un array con los campos y un parámetro extra con la tabla, yo para eso solo hicé un metodo llamado query de esta forma:
--- Código: PHP --- /* * Este método mostrará datos de una consulta de varias tablas * @param string $query sql query * @param integer $tipo El tipo de query que se ejecutará * @param string $error Para mostrar un error diferente al default de MySQL * @return $arrayRetorno Tiene el resultado, la cantidad de registros, un array con los registros y el último indexado */ public function query($query, $tipo=0, $trace=0, $error='<br /><b>Query ejecutado incorrectamente<br />') { $this->result = mysql_query($query) or die(mysql_error().$error.$query.'</b>'); //Dependiendo del tipo de consulta SQL escojida //extraemos las variables switch($tipo) { case 0: //SELECT $this->numrows = mysql_num_rows($this->result); $this->arrayRegistros = mysql_fetch_array($this->result); $this->ultimo = ''; break; case 1: //INSERT $this->ultimo = mysql_insert_id(); $this->numrows = ''; $this->arrayRegistros = ''; break; case 2: //UPDATE case 3: //DELETE case 4: //ALTER $this->numrows = ''; $this->arrayRegistros = ''; $this->ultimo = ''; break; case 5: //SHOW TABLES case 6: //OPTIMIZE TABLE $this->numrows = ''; break; } //Estos son todos los datos que se pueden extraer de un query //Aca lo que se hace es devolverlo todo en un array $arrayRetorno = array($this->result, $this->numrows, $this->arrayRegistros, $this->ultimo); if ($trace==1) { debug_print_backtrace(); } return $arrayRetorno; }
DriverOp:
Edo:
La tuya es una buena idea pero mi intención no era ahorrar código sino que no tener que lidiar con la sintaxis de insert, update y delete toda las veces. Es cierto que tienes que pasar un array pero es "más fácil" recordar la sintaxis de un array que de un insert o update. Al menos para mí es así.
Por ejemplo:
--- Código: PHP --- // Nueva propiedad pública.public $affectedrows = 0; public function Update($tabla, $lista, $where) { $this->affectedrows = -1; if (!is_array($lista)) { $this->error = true; $this->errno = -1; $this->errmsg = "Segundo parámetro no es array ('campo'=>'valor')"; return false; } else { $aux = array(); foreach ($lista as $key => $value) { $aux[] = sprintf("`%s` = `%s`", $key, $value); } // foreach $sql = sprintf("UPDATE `%s` SET %s", $tabla, implode(", ",$aux)); if (!empty($where)) { $sql .= " WHERE ".trim($where); } $this->resultado = mysql_query($sql,$this->descriptor); if (!$this->VerifError()) { $this->affectedrows = mysql_affected_rows($this->descriptor); return true; } else { return false; } } // else} // Update
Y se usa así:
--- Código: PHP --- if ($usuario->Update("usuarios",array("nombre"=>"Juan", "apellido"=>"Perez"),"id = 1")) { echo "Se actualizaron ".$usuario->affectedrows." registros."; }
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa