Foros del Web » Programando para Internet » PHP »

clase básica para conexión a bd

Estas en el tema de clase básica para conexión a bd en el foro de PHP en Foros del Web. Hola amigos! les cuento que soy muy nuevo en poo y estoy creando de forma muy básica una clase para conectarme a una base de ...
  #1 (permalink)  
Antiguo 03/08/2010, 16:25
 
Fecha de Ingreso: mayo-2010
Mensajes: 46
Antigüedad: 14 años
Puntos: 0
clase básica para conexión a bd

Hola amigos!

les cuento que soy muy nuevo en poo y estoy creando de forma muy básica una clase para conectarme a una base de datos y estoy un poco perdido he aquí mi código:

<?php
class acceso_bd{
private $host="localhost";
private $user="usr_float";
private $pass="123456";
private $db="blogfloat";
private $enlace;
private $link;

public function __construct(){
$this->host=$host;
$this->user=$user;
$this->pass=$pass;
$this->db=$db;
}
private function conectar($sql){
$this->enlace=mysql_connect($this->host,$this->user,$this->pass);
mysql_select_db($this->db,$this->conexion) or die ("existen problemas con la base de datos.".mysql_error());
}
public function acceso_db(){
$this->link=mysql_query($sql,$this->enlace);
return $this->link;
}
public function consulta(){
return $this->conectar();
}
}
$acceso_bd = new acceso_bd();
?>

y la forma en que lo implemento es la siguiente:

$sql = "select id_noticia, titulo_noticia, noticia, fecha_noticia, categoria from noticias order by id_noticia desc limit 6";
$link = $conecta->ejecuta($sql);
while($fila = mysql_fetch_assoc($link)){


y el error que me da es el siguiente:

Fatal error: Call to a member function ejecuta() on a non-object in D:\xampp\htdocs\PhpProject1\index.php on line 13

de seguro hay varios problemas , pero quiero empezar desde lo más basico!!
espero un ayuda!
muchas gracias por su tiempo.
  #2 (permalink)  
Antiguo 03/08/2010, 20:03
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: clase básica para conexión a bd

Cita:
$link = $conecta->ejecuta($sql);
no tienes ningun metodo que se llame ejecuta o sera q yo no lo vi??

y bueno y hice algo parecido para cmenzar con esto de php orientado a objetos tambien estoy comenzando en esto no es algo super bravo pero es un comienzo si kieres le echas un ojo es la ultima vercion del codigo xq ahi puse bastante xq era mi primera clase jaja si kieres la revisas y vez si te sirve http://www.forosdelweb.com/f68/mejorar-codigo-823339/
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Última edición por carlos_belisario; 03/08/2010 a las 20:24
  #3 (permalink)  
Antiguo 04/08/2010, 01:46
 
Fecha de Ingreso: mayo-2010
Mensajes: 46
Antigüedad: 14 años
Puntos: 0
Respuesta: clase básica para conexión a bd

gracias por tu interes, he mirado tu codigo pero no logro asociarlo a lo que busco y es verdad habia un metodo perdido en este caso ejecuta que no existia. He buscado por alli un codigo que lo he visto muy limpio y lo he intentado adaptar a mis necesidades, el código es el siguiente:

<?php
class acceso_bd{
private $host="localhost";
private $user="usr_float";
private $pass="123456";
private $db="blogfloat";
private $enlace;
private $link;

public function __construct(){
$this->host=$host;
$this->user=$user;
$this->pass=$pass;
$this->db=$db;
}
private function conectar(){
$this->enlace=mysql_connect($this->host,$this->user,$this->pass);
mysql_select_db($this->db,$this->enlace) or die ("existen problemas con la base de datos.".mysql_error());
}
public function acceso_db($sql){
$this->link=mysql_query($sql,$this->enlace);
return $this->link;
}
/* Muestra los datos de una consulta*/

function verconsulta() {
while ($fila = mysql_fetch_assoc($this->link)) {
$fecha = strtotime($fila['fecha_noticia']);
setlocale(LC_TIME, 'es_ES.ISO8859-1'); //Para cambiar la hora a formato ep·pañol
$formateafecha = strftime('%A, %d de %B', $fecha);
echo "<h4><a href=\"noticias.php?id=".$fila['id_noticia'].">".$fila['titulo_noticia']."</a></h4>";
echo "<p class=\"alinear\">";
echo substr($fila['noticia'],0,500)."...";
echo "<a href=\"noticias.php?id=".$fila['id_noticia']."class=\"enlace\">ir a noticia</a>";
echo "</p>";
echo "<tr> \n";
echo "<div class=\"post-info\">";
echo "<p class=\"autor\">autor:</p>";
echo "<p class=\"info\">Categoria:".$fila['categoria']."</p>";
echo "<p class=\"categ\">";
echo htmlentities($formateafecha);
echo "</p>";
echo "</div>";

}

}
public function consulta(){
return $this->conectar();
}
}
?>

y lo utilizo de la siguiente forma en el codigo:

$enviar = new acceso_bd();
$enviar->consulta();
$enviar->acceso_db("select id_noticia, titulo_noticia, noticia, fecha_noticia, categoria from noticias order by id_noticia desc limit 6");
$enviar->verconsulta();

pero me tira el sigueinte error que lo entiendo como quela funcion mysql_fetch_assoc no recibe la consulta!

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in O:\webs\float00\blog\funciones\acceso_bd.php on line 17

Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in O:\webs\float00\blog\funciones\acceso_bd.php on line 18
existen problemas con la base de datos.Access denied for user 'ODBC'@'localhost' (using password: NO)

bueno, seguiré investigando este error, por favor si alguien me puede orientar que dentro de poco comienzo a trabajar y me está costando bastante el tema clases y objetos!!
un saludo a todos

Última edición por floatstudio; 04/08/2010 a las 08:38
  #4 (permalink)  
Antiguo 04/08/2010, 08:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: clase básica para conexión a bd

Necesitas pasarle un resource de tu query, y le estas pasando el objeto completo como tal, en este caso debería de ser el valor devuelto por tu método consulta().

Saludos.
  #5 (permalink)  
Antiguo 04/08/2010, 08:40
 
Fecha de Ingreso: mayo-2010
Mensajes: 46
Antigüedad: 14 años
Puntos: 0
Respuesta: clase básica para conexión a bd

gracias gatorv por interesarte, pero he modificado el código por uno en el que estaba trabajando anteriormente y me parecía un poco más limpio y accesible, pero me tira el error que aquí te expongo:

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in O:\webs\float00\blog\funciones\acceso_bd.php on line 17

Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in O:\webs\float00\blog\funciones\acceso_bd.php on line 18
existen problemas con la base de datos.Access denied for user 'ODBC'@'localhost' (using password: NO)

gracias!!
  #6 (permalink)  
Antiguo 04/08/2010, 09:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: clase básica para conexión a bd

Eso pasa porque no le estas pasando nada a mysql_connect() y esta tomando los valores por defecto del php.ini.

Saludos.
  #7 (permalink)  
Antiguo 04/08/2010, 09:29
 
Fecha de Ingreso: mayo-2010
Mensajes: 46
Antigüedad: 14 años
Puntos: 0
Respuesta: clase básica para conexión a bd

esta claro!!!! pero el problema es que no se por donde solucionarlo, porque a mysql_connect le estoy pasando los tres parámetros necesarios para la conexión, espero estar en lo cierto, sino puedes darme una mano por donde continuar!!
gracias!
  #8 (permalink)  
Antiguo 04/08/2010, 09:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: clase básica para conexión a bd

De hecho no:
Código PHP:
Ver original
  1. public function __construct(){
  2. $this->host=$host;
  3. $this->user=$user;
  4. $this->pass=$pass;
  5. $this->db=$db;
  6. }

Ahí lo que estas haciendo es al construir la clase pones las variables como nulas, ya que en ningún lado defines $host, $user, $pass, $db.

Saludos.
  #9 (permalink)  
Antiguo 04/08/2010, 09:56
 
Fecha de Ingreso: mayo-2010
Mensajes: 46
Antigüedad: 14 años
Puntos: 0
Respuesta: clase básica para conexión a bd

tenias toda la razón!!! pensaba que con el solo hecho de haberles dado un valor a cada una de las variables que componen las propiedades de la clase ya era suficiente!!
lo que hice fue incluir un include dentro del constructor con los valoress de las variables necesarias para la conexión.

me falta mucho camino por recorrer!!
muchas gracias!!

código final(solucionado):

<?php
class acceso_bd{
private $host;
private $user;
private $pass;
private $db;
private $enlace;
private $link;

public function __construct(){
include "datos_acceso.php";
$this->host=$host;
$this->user=$user;
$this->pass=$pass;
$this->db=$db;
}
private function conectar(){
$this->enlace=mysql_connect($this->host,$this->user,$this->pass);
mysql_select_db($this->db,$this->enlace) or die ("existen problemas con la base de datos.".mysql_error());
}
public function acceso_db($sql){
$this->link=mysql_query($sql,$this->enlace);
return $this->link;
}
/* Muestra los datos de una consulta*/

public function verconsulta() {
while ($fila = mysql_fetch_assoc($this->link)) {
$fecha = strtotime($fila['fecha_noticia']);
setlocale(LC_TIME, 'es_ES.ISO8859-1'); //Para cambiar la hora a formato ep·pañol
$formateafecha = strftime('%A, %d de %B', $fecha);
echo "<h4><a href=\"noticias.php?id=".$fila['id_noticia'].">".$fila['titulo_noticia']."</a></h4>";
echo "<p class=\"alinear\">";
echo substr($fila['noticia'],0,500)."...";
echo "<a href=\"noticias.php?id=".$fila['id_noticia']."class=\"enlace\">ir a noticia</a>";
echo "</p>";
echo "<tr> \n";
echo "<div class=\"post-info\">";
echo "<p class=\"autor\">autor:</p>";
echo "<p class=\"info\">Categoria:".$fila['categoria']."</p>";
echo "<p class=\"categ\">";
echo htmlentities($formateafecha);
echo "</p>";
echo "</div>";

}

}
public function consulta(){
return $this->conectar();
}
}
?>
  #10 (permalink)  
Antiguo 04/08/2010, 10:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: clase básica para conexión a bd

Pues de hecho aunque funciona, no es lo correcto ya que rompes con la abstracción de tu clase, te recomiendo leas el termino y mejor uses un ejemplo config o algo por el estilo.

Saludos.
  #11 (permalink)  
Antiguo 04/08/2010, 10:44
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años
Puntos: 60
Respuesta: clase básica para conexión a bd

Creo que como dice gatorV ese código que acabas de enviar esta muuuy mal :) revisa en el foto hay varios ejemplos.
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #12 (permalink)  
Antiguo 04/08/2010, 13:11
 
Fecha de Ingreso: mayo-2010
Mensajes: 46
Antigüedad: 14 años
Puntos: 0
Respuesta: clase básica para conexión a bd

por el momento solo uso este ejemplo para hacer pruebas, no lo lo llevo al ámbito profesional, más allá de que no es correcto!!
gracias por aconsejarme!!, seguiré los pasos que me proponen.
un saludo a todos.

Etiquetas: bd, clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:02.