• Domingo 22 de Diciembre de 2024, 13:34

Autor Tema:  Problema con script en PHP  (Leído 9741 veces)

Ale992

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Problema con script en PHP
« en: Miércoles 10 de Noviembre de 2010, 01:04 »
0
Bueno tengo el siguiente script:
Código: PHP
  1. <?php
  2.  
  3. class db
  4. {
  5.  
  6. private $servidor;
  7. private $usuario;
  8. private $pass;
  9. private $base_datos;
  10. private $descriptor;
  11.  
  12. function __construct($servidor = "mysql8.000webhost.com",$usuario = "a7863285_xasd",$pass = "xxxxxx",$base_datos = "a7863285_cManage")
  13. {
  14. $this->servidor = $servidor;
  15. $this->usuario = $usuario;
  16. $this->pass = $pass;
  17. $this->base_datos = $base_datos;
  18. $this->conectar_base_datos();
  19.  
  20. }
  21. prívate function conectar_base_datos()   //ERROR EN ESTA LINEA
  22. {
  23. $this->descriptor = mysql__connect($this->servidor,$this-
  24. >usuario,$this->pass) ;
  25. mysql_select_db($this->base_datos,$this->descriptor);
  26. }
  27. public function consulta($consulta)
  28. {
  29. $this->resultado = mysql_query($consulta,$this->descriptor) ;
  30. }
  31. public function utf ()
  32. {
  33. mysql_query ("SET NAMES 'utf8'");
  34. }
  35. }
  36. ?>
  37.  

Y el error es el siguiente:

Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in /home/a7863285/public_html/mysql.php on line 21

Alguien tiene idea que es lo que hay mal o como solucionarlo?

Gracias.

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Problema con script en PHP
« Respuesta #1 en: Miércoles 10 de Noviembre de 2010, 02:19 »
0
De momento veo que en la línea 21 tienes lo siguiente "prívate function" con acento... quíate el acento al  "private".

En la línea 23 y 24 (deberia estar todo en uno sola línea) dice mysql__connect, cambialo por mysql_connect
$this->descriptor = mysql__connect($this->servidor,$this-
>usuario,$this->pass) ;
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

Ale992

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #2 en: Miércoles 10 de Noviembre de 2010, 02:22 »
0
Gracias, ya lo corregi.

Mi pregunta es si una vez creado un nuevo objeto con esa clase, y luego de haberme conectado a la base de datos y hecho la consulta a la misma usando las funciones de la clase puedo hacer mysql_close() directamente en el codigo o si la unica manera de cerrar la conexion es creando una nueva funcion en la clase que cierre la conexion. Porque lo cerre de la primer manera y me larga un error y no se si es que no se puede hacer o si volvi a hacer algo mal.

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Problema con script en PHP
« Respuesta #3 en: Miércoles 10 de Noviembre de 2010, 02:33 »
0
La función mysql_close($link) no siempre es necesaria... pero cuando la colocas, si no le pasas un $link en el parámetro, se cierra la última conexion...
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

Ale992

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #4 en: Miércoles 10 de Noviembre de 2010, 02:52 »
0
Ok, ahora voy a probar, y otra cosa, disculpa que siga preguntando es que soy bastante nuevo en esto y todavia no logro comprender del todo el funcionamiento de la programacion orientada a objetos.

Este es el codigo de la clase:
Código: PHP
  1.  
  2.  
  3. class db
  4. {
  5.  
  6. private $servidor;
  7. private $usuario;
  8. private $pass;
  9. private $base_datos;
  10. public  $descriptor;
  11.  
  12. function __construct($servidor = "mysql8.000webhost.com",$usuario = "a7863285_root",$pass = "alexismoyano1992",$base_datos = "a7863285_cManage")
  13. {
  14. $this->servidor = $servidor;
  15. $this->usuario = $usuario;
  16. $this->pass = $pass;
  17. $this->base_datos = $base_datos;
  18. $this->conectar_base_datos();
  19.  
  20. }
  21. private function conectar_base_datos()
  22. {
  23. $this->descriptor = mysql_connect($this->servidor,$this->usuario,$this->pass) ;
  24. mysql_select_db($this->base_datos,$this->descriptor);
  25. }
  26. public function consulta($consulta)
  27. {
  28. $this->resultado = mysql_query($consulta,$this->descriptor) ;
  29. }
  30. public function extraer_registro ()
  31. {
  32. if ($fila = mysql_fetch_array($this->resultado,MYSQL_ASSOC)){
  33.   return $fila;}
  34. else {
  35.   return $fila[0]= "ERROR";
  36. }
  37. }
  38. public function utf ()
  39. {
  40. mysql_query ("SET NAMES 'utf8'");
  41. }
  42. public function close (){
  43.  mysql_close($this->descriptor);
  44. }
  45. }
  46.  
  47.  

Y este el del programa:

Código: PHP
  1.  
  2.           require_once("mysql.php");
  3.          
  4.           $usuario = new db();
  5.           $query= "SELECT * FROM news ORDER BY newID DESC LIMIT 0,10";
  6.          
  7.           $usuario->utf();
  8.           $usuario->consulta($query);
  9.           $fila = $usuario->extraer_registro();
  10.          
  11.          
  12.          // $resultado=mysql_query($query, $connect) or die ("Problema al acceder a los datos ".mysql_error());
  13.          // while ($reg = mysql_fetch_array($resultado))
  14.          // {
  15.          //   $fecha= $reg['date'];
  16.          //  echo "<div id="date" align="right">( ".cambiaf($fecha).")</div>";
  17.          //  echo "<div id='met'>".stripslashes($reg["title"])."</div>";
  18.          // echo "<div class='text'><p>".stripslashes($reg["article"])."<br/></p></div>";
  19.          //  echo "<div id='hr2'></div>";
  20.  
  21.           //}
  22.          
  23.           echo $fila[0];
  24.           echo $fila[1];
  25.           echo "Hola";
  26.  
  27.           $usuario->close();
  28.  
  29.  

Yo tengo que tomar los 10 ultimos registros que se encuentran en una base de datos, eso lo hago pero despues tengo que tomar los datos de cada fila y mostrarlos, eso antes lo hacia sin la programacion orientada a objetos, pero ahora quiero pasar todo y se me complico, la manera como la realizaba antes era lo que esta como comentario y de esa manera funcionaba perfecto, pero como deberia hacerlo en POO.

Y otra cosa, en la funcion extraer_registro() de la clase supuestamente deberia devolver una variable $fila que es un array con los datos, pero como los recibo a esos datos?
Lo hice de la siguiente manera como ven en el codigo:
$fila = $usuario->extraer_registro();
y despues intente ver que tenia la variable pero no tiene nada o por lo menos no muestra nada...

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Problema con script en PHP
« Respuesta #5 en: Miércoles 10 de Noviembre de 2010, 03:02 »
0
En el método extraer_registro () de tu clase puedes colocar en el return lo siguiente:

Código: PHP
  1. public function extraer_registro ()
  2. {
  3. return mysql_fetch_array($this->resultado,MYSQL_ASSOC);
  4. }
  5.  

Al retornar una estructura que usa el mysql para iterar los registros, luego puedes implementar tu clase como lo hacias con el mysql:

Código: PHP
  1. while ($fila = $usuario->extraer_registro())
  2. {
  3. echo $fila[0];
  4. echo $fila[1];
  5. }
  6.  

Debería funcionar. Mi hermano hizo una clase para mysql y creo que la implementó así.
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #6 en: Miércoles 10 de Noviembre de 2010, 03:05 »
0
Te iba a envíar 2 clases hechas por mi en php pero el foro no me dejo, dame tú mail por MP y te las mando.
El pasado son solo recuerdos, el futuro son solo sueños

Ale992

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #7 en: Miércoles 10 de Noviembre de 2010, 03:12 »
0
Ahi esta, muchas gracias.

Otra pregunta y espero qeu la ultima asi no te sigo molestando, conviene agregar en un solo archivo todas las funciones MySQL que utilize en toda la web o conviene mas ir armando archivos separados para que no se arme un archivo que pese tanto?

  Te molestaria agregarme al msn? alee.m (aroba) live.com.ar

Saludos y gracias denuevo.

Ale992

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #8 en: Miércoles 10 de Noviembre de 2010, 03:16 »
0
Cita de: "Edo"
Te iba a envíar 2 clases hechas por mi en php pero el foro no me dejo, dame tú mail por MP y te las mando.

En el mensaje anterior deje el mail porque aun no me deja enviar MP. Si quieren agregarme no hay drama, quizas algun dia yo pueda sacarlos de algun apuro (tendre que estudiar bastante para alcanzarlos pero quien sabe jaja ).

Saludos.

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Problema con script en PHP
« Respuesta #9 en: Miércoles 10 de Noviembre de 2010, 03:20 »
0
Ya te agregué, te conviene tener mejor todo ordenado. No tengas miedo al tamaño del archivo. El texto plano representa una gran ventaja porque tendrás que escribir DEMASIADO para que un archivo de código te quede pesado. Lo mejor es que hagas tus clases, preferiblemente cada clase en un archivo para tener todo mejor ordenado (aunque nada impide que pongas todas las clases en uno solo). Lo mismo con las funciones, trata de centralizar los recursos.
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #10 en: Miércoles 10 de Noviembre de 2010, 03:37 »
0
Cita de: "Ale992"
Ahi esta, muchas gracias.

Otra pregunta y espero qeu la ultima asi no te sigo molestando, conviene agregar en un solo archivo todas las funciones MySQL que utilize en toda la web o conviene mas ir armando archivos separados para que no se arme un archivo que pese tanto?

  Te molestaria agregarme al msn? alee.m (aroba) live.com.ar

Saludos y gracias denuevo.

Yo no uso messenger, si quieres podemos por el GTalk mi usuario es willian.radicaled-gmail-com
ya se fueron las 2 clases.
El pasado son solo recuerdos, el futuro son solo sueños

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Problema con script en PHP
« Respuesta #11 en: Miércoles 10 de Noviembre de 2010, 03:50 »
0
Te voy a agregar Edo ... saludos
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #12 en: Sábado 13 de Noviembre de 2010, 18:00 »
0
Ya que al leer el código de la clase que has hecho me has dado una idea que me parece excelente (me refiero al método utf) devuelvo el favor con una mejora. Se trata de cómo recorrer los resultados de una consulta. He aquí el código:
Código: PHP
  1.  
  2. ...
  3. public $numrows = 0; // Nueva propiedad
  4. ...
  5. public function consulta($consulta) {
  6.   $this->resultado = mysql_query($consulta,$this->descriptor);
  7.   $this->numrows = mysql_num_rows($this->resultado);
  8. }
  9.  
  10. public function primero() {
  11.   if ($this->numrows > 0) {
  12.     mysql_data_seek($this->resultado,0);
  13.    return mysql_fetch_assoc($this->resultado);
  14.   }
  15.  else { return false; }
  16. }
  17.  
  18. public function siguiente() {
  19.   if ($this->numrows > 0) {
  20.     return mysql_fetch_assoc($this->resultado);
  21.   }
  22.   else { return false; }
  23. }
  24. ...
  25.  
  26.  

Y se puede usar así (usando tu ejemplo):
Código: PHP
  1.  
  2. if ($fila = $usuario->primero()) {
  3.   do {
  4. // Hacer lo apropiado con $fila
  5.   } while ($fila = $usuario->siguiente());
  6. }
  7.  
  8.  

O bién, en caso que quieras saber si la consulta regresó 1 o más registros:
Código: PHP
  1.  
  2. if ($usuario->numrows > 0) {
  3.   echo "La consulta generó: ".$usuarios->numrows." registros.";
  4. }
  5.  
  6.  

Enjoy :)

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Problema con script en PHP
« Respuesta #13 en: Sábado 13 de Noviembre de 2010, 18:13 »
0
Excelente aporte DriverOp... lo cual me da una idea para mejorar una clase que ya tengo. Esta se puede mejorar más si se crean 2 clases... una que permita especificar los datos de conexion y el query, y que una vez se haya hecho eso, retorne otro objeto de tipo BASE DE DATOS, de manera que se pueda usar de la siguiente forma:

Código: PHP
  1. $objDB=connect($host,$user,$pass);
  2. $rs=$objDB->query("select dato from tabla where activo=1");
  3.  

Y lo funcional estaría en que con el mismo objeto puedes abrir otra consulta a otra tabla, incluso otra base de datos:
Código: PHP
  1. $rs2=$objDB->query("select otros from tabla2");
  2.  

Y sería muy útil poder recorrerlo así
Código: PHP
  1. while ($rs->fila())
  2. {      echo $rs[0];
  3.        echo $rs['dato'];
  4. }
  5.  

Y de la misma forma con el $rs2... y tener funciones como:
Código: PHP
  1. $rs->count();
  2. $rs2->vacio();
  3. $rs2->error();
  4.  

Es una idea, sería bastante útil...
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

Ale992

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #14 en: Sábado 13 de Noviembre de 2010, 18:21 »
0
Gracias a los dos, ahora voy a ver como optimizar las clases.

Y sobre el UTF es una clase que cree ya que estoy haciendo un manejador de noticias y de no poner todo en UTF no me reconocia los acentos en las palabras, asique me sirvio para solucionar ese problema y me alegro que te haya servido ;).

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #15 en: Domingo 14 de Noviembre de 2010, 00:41 »
0
Si vas a usar paginador te funcionará, es más es algo que les falta a mis clases.
El pasado son solo recuerdos, el futuro son solo sueños

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Problema con script en PHP
« Respuesta #16 en: Domingo 14 de Noviembre de 2010, 01:43 »
0
Aquí les dejo la clase que hice para mysql:

Código: PHP
  1. class FMysql
  2. {   var $host;
  3.     var $pass;
  4.     var $user;
  5.     var $link;
  6.     var $numQuerys=0;
  7.     var $db;
  8.     function __construct($host,$user,$pass,$db)
  9.     {   $this->user=$user;
  10.         $this->pass=$pass;
  11.         $this->host=$host;
  12.         $this->db=$db;
  13.         $this->link=mysql_connect($this->host,$this->user,$this->pass);
  14.         mysql_select_db($this->db,$this->link);        
  15.     }
  16.     function query($sql)
  17.     {   $this->numQuerys++;
  18.         return new FMysqlObjectDB($sql,$this->link);
  19.     }
  20. }
  21.  
  22. class FMysqlObjectDB
  23. {   var $regs;
  24.     var $res;
  25.     var $pos;
  26.     var $data;
  27.     function __construct($sql,$link)
  28.     {   @$this->res=mysql_query($sql,$link);
  29.         $this->regs=mysql_num_rows($this->res);
  30.         if (mysql_error())
  31.         {   echo "<div style="border:1px solid gray;font-family:Helvetica;font-size:11px;width:200px;background-color:#FFFF99;">
  32.                     <b>Error (".mysql_errno()."):</b> ".mysql_error().
  33.                     "</div>";
  34.        
  35.             exit();
  36.         }
  37.         $this->pos=0;
  38.     }      
  39.     function numRegistros()
  40.     {   return $this->regs;
  41.     }
  42.     function getFila()
  43.     { 
  44.         if ($this->regs>0 && $this->pos<$this->regs)
  45.         {   mysql_data_seek($this->res,$this->pos);
  46.             $this->data=mysql_fetch_array($this->res);
  47.             $this->pos++;
  48.            
  49.             return $this->data;
  50.         }
  51.         else
  52.         {   $this->pos=0;
  53.             return false;              
  54.         }
  55.     }
  56.     function __get($nombre)
  57.     {   return $this->data[$nombre];
  58.     }
  59. }
  60.  
  61.  

Y la forma de implementarlo sería:
Código: PHP
  1. $SQL=new FMysql("localhost","root","","datos");   
  2. //Forma 1
  3. $rs1=$SQL->query("select id,nombre from vt_clientes order by id");
  4. while ($rs1->getFila())
  5. {   echo "Id: ".$rs1->id;
  6.     echo "<br>Nombre: ".$rs1->nombre;      
  7.     echo "<br>";
  8.  
  9. }
  10.  
  11. //Forma 2
  12. $rs2=$SQL->query("select id,nombre from vt_clientes order by id");
  13. while ($dat=$rs2->getFila())
  14. {   echo "Id: ".$dat['id'];
  15.     echo "<br>Nombre: ".$dat['nombre'];    
  16.     echo "<br>";
  17.  
  18. }
  19.  
  20.  

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
  1. $SQL->query("insert into personas (nombre,apellido) values ('pedro','perez')");
  2. $SQL->query("delete from personas where id=1");
  3.  

De igual forma se hace para actualizar. Le faltan otras cosas como un método que devuelva el último id...
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #17 en: Lunes 15 de Noviembre de 2010, 06:14 »
0
Bien pues, para controlar errores se me ha ocurrido lo siguiente.
Código: PHP
  1.  
  2. /* Nuevas propiedades */
  3.   public $errmsg = "";
  4.   public $error = false;
  5.   public $errno = 0;
  6.  
  7.   private function VerifError() { // No es necesario que sea accesible desde afuera
  8.    $this->errno = mysql_errno();
  9.    $this->error = $this->errno != 0;
  10.    $this->errmsg = $this->errno.": ".mysql_error();
  11.    return $this->error;
  12. }
  13.  
  14.  
Luego en cada método suceptible de experimentar un error agregar este código, por ejemplo al conectar...
Código: PHP
  1.  
  2. private function conectar_base_datos() {
  3.   $this->descriptor = mysql_connect($this->servidor,$this->usuario,$this->pass);
  4.   if (!$this->VerifError()) {
  5.     mysql_select_db($this->base_datos,$this->descriptor);
  6.     $this->VerifError();
  7.   }
  8. }
  9.  
  10.  
Y se usaría (usando el ejemplo de ale992):
Código: PHP
  1.  
  2. $usuario = new db();
  3. if (!$usuario->error) {
  4.   // trajabar con la base de datos
  5. } else {
  6.   echo $usuario->$errmsg; // Mostrar el mensaje de error.
  7. }
  8.  
  9.  
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

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #18 en: Lunes 15 de Noviembre de 2010, 16:18 »
0
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
  1.   /*
  2.    * Este m&eacute;todo mostrar&aacute; datos de una consulta de varias tablas
  3.    * @param string $query    sql query
  4.    * @param integer $tipo    El tipo de query que se ejecutar&aacute;
  5.    * @param string $error    Para mostrar un error diferente al default de MySQL
  6.    * @return $arrayRetorno   Tiene el resultado, la cantidad de registros, un array con los registros y el &uacute;ltimo indexado
  7.    */
  8.   public function query($query, $tipo=0, $trace=0, $error='<br /><b>Query ejecutado incorrectamente<br />')
  9.   {
  10.     $this->result = mysql_query($query) or die(mysql_error().$error.$query.'</b>');
  11.  
  12.     //Dependiendo del tipo de consulta SQL escojida
  13.     //extraemos las variables
  14.     switch($tipo)
  15.     {
  16.       case 0:  //SELECT
  17.            $this->numrows = mysql_num_rows($this->result);
  18.            $this->arrayRegistros = mysql_fetch_array($this->result);
  19.            $this->ultimo = '';
  20.            break;
  21.       case 1:  //INSERT
  22.            $this->ultimo = mysql_insert_id();
  23.            $this->numrows = '';
  24.            $this->arrayRegistros = '';
  25.            break;
  26.       case 2:  //UPDATE
  27.       case 3:  //DELETE
  28.       case 4:  //ALTER
  29.            $this->numrows = '';
  30.            $this->arrayRegistros = '';
  31.            $this->ultimo = '';
  32.            break;
  33.       case 5:  //SHOW TABLES
  34.       case 6:  //OPTIMIZE TABLE
  35.            $this->numrows = '';
  36.            break;
  37.     }
  38.  
  39.     //Estos son todos los datos que se pueden extraer de un query
  40.     //Aca lo que se hace es devolverlo todo en un array
  41.     $arrayRetorno = array($this->result, $this->numrows, $this->arrayRegistros, $this->ultimo);
  42.  
  43.     if ($trace==1)
  44.     {
  45.       debug_print_backtrace();
  46.     }
  47.  
  48.     return $arrayRetorno;
  49.   }
  50.  
  51.  
El pasado son solo recuerdos, el futuro son solo sueños

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #19 en: Lunes 15 de Noviembre de 2010, 23:17 »
0
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
  1.  
  2. // Nueva propiedad pública.
  3. public $affectedrows = 0;
  4.  
  5. public function Update($tabla, $lista, $where) {
  6.   $this->affectedrows = -1;
  7.   if (!is_array($lista)) {
  8.     $this->error = true;
  9.     $this->errno = -1;
  10.     $this->errmsg = "Segundo parámetro no es array ('campo'=>'valor')";
  11.   return false; }
  12.   else  {
  13.     $aux = array();
  14.     foreach ($lista as $key => $value) {
  15.        $aux[] = sprintf("`%s` = `%s`", $key, $value);
  16.     } // foreach
  17.     $sql = sprintf("UPDATE `%s` SET %s", $tabla, implode(", ",$aux));
  18.     if (!empty($where)) {
  19.       $sql .= " WHERE ".trim($where);
  20.     }
  21.     $this->resultado = mysql_query($sql,$this->descriptor);
  22.     if (!$this->VerifError()) {
  23.       $this->affectedrows = mysql_affected_rows($this->descriptor);
  24.       return true;
  25.      } else { return false; }
  26.   } // else
  27. } // Update
  28.  
  29.  

Y se usa así:
Código: PHP
  1.  
  2. if ($usuario->Update("usuarios",array("nombre"=>"Juan", "apellido"=>"Perez"),"id = 1")) { echo "Se actualizaron ".$usuario->affectedrows." registros."; }
  3.  
  4.  

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Problema con script en PHP
« Respuesta #20 en: Lunes 15 de Noviembre de 2010, 23:51 »
0
Mi hermano hizo una clase que implementaba los métodos de ingresar, modificar, eliminar asi:

Para ingresar:
Código: PHP
  1. $persona->nombre="jose";
  2. $persona->apellido="perez";
  3. $persona->guardar();
  4.  

Para modificar:
Código: PHP
  1. $persona->nombre="jose";
  2. $persona->apellido="perez";
  3. $persona->actualizar();
  4.  

Para eliminar:
Código: PHP
  1. $persona->id=1;
  2. $persona->eliminar();
  3.  
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #21 en: Lunes 15 de Noviembre de 2010, 23:57 »
0
Igual, debes decirle primero que todo cuando creas el objeto a que tabla va a apuntar y en vez de pasarle un array estás pasando parámetro por parámetro.

Todas son validas, lo que quise mostrar fue el hacerlo más corto y que quien lo vaya a leer después de mi no se trabe con tantos metodos, sino que encuentra uno solo y se guía con este.
El pasado son solo recuerdos, el futuro son solo sueños

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #22 en: Martes 16 de Noviembre de 2010, 14:21 »
0
Pues supongo que es una cuestión de costumbre. A mi me parece más intuitivo para el programador que venga después de mí, esto $objeto->update() que estar recordando que un 2 en el segundo parámetro de la función indica que se está actualizando la tabla.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Problema con script en PHP
« Respuesta #23 en: Martes 16 de Noviembre de 2010, 14:29 »
0
jejeje, sí, eso estaba viendo, pero el switch se puede pasar por parámetro string, ósea:
Código: PHP
  1.   /*
  2.    * Este método mostrará datos de una consulta de varias tablas
  3.    * @param string $query    sql query
  4.    * @param integer $tipo    El tipo de query que se ejecutará
  5.    * @param string $error    Para mostrar un error diferente al default de MySQL
  6.    * @return $arrayRetorno   Tiene el resultado, la cantidad de registros, un array con los registros y el último indexado
  7.    */
  8.   public function query($query, $tipo='SELECT', $trace=0, $error='<br /><b>Query ejecutado incorrectamente<br />')
  9.   {
  10.     $this->result = mysql_query($query) or die(mysql_error().$error.$query.'</b>');
  11.  
  12.     /*
  13.      * Dependiendo del tipo de consulta SQL escojida extraemos las variables
  14.      */
  15.     switch($tipo)
  16.     {
  17.       case 'SELECT':
  18.            $this->numrows = mysql_num_rows($this->result);
  19.            $this->arrayRegistros = mysql_fetch_array($this->result);
  20.            $this->ultimo = '';
  21.            break;
  22.       case 'INSERT':
  23.            $this->ultimo = mysql_insert_id();
  24.            $this->numrows = '';
  25.            $this->arrayRegistros = '';
  26.            break;
  27.       case 'UPDATE':
  28.       case 'DELETE':
  29.       case 'ALTER':
  30.            $this->numrows = '';
  31.            $this->arrayRegistros = '';
  32.            $this->ultimo = '';
  33.            break;
  34.       case 'SHOW TABLES':
  35.       case 'OPTIMIZE TABLE':
  36.            $this->numrows = '';
  37.            break;
  38.     }
  39.  
  40.     /*
  41.      * Estos son todos los datos que se pueden extraer de un query
  42.      * Acá lo que se hace es devolverlo todo en un array
  43.      */
  44.     $arrayRetorno = array($this->result, $this->numrows, $this->arrayRegistros, $this->ultimo);
  45.  
  46.     if ($trace==1)
  47.     {
  48.       debug_print_backtrace();
  49.     }
  50.  
  51.     return $arrayRetorno;
  52.   }
  53.  
  54.  
Y se puede usar:
Código: PHP
  1. $sql-query("UPDATE TABLA SET a=1 WHERE x=y", "UPDATE")
  2.  
El pasado son solo recuerdos, el futuro son solo sueños