Programación Web y Scripting > PHP

 Problema con script en PHP

<< < (4/5) > >>

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&eacute;todo mostrar&aacute; datos de una consulta de varias tablas   * @param string $query    sql query   * @param integer $tipo    El tipo de query que se ejecutar&aacute;   * @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 &uacute;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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa