Foros del Web » Programando para Internet » PHP »

PHP OO Error en consulta o conexión con una clase.

Estas en el tema de Error en consulta o conexión con una clase. en el foro de PHP en Foros del Web. Pues eso mismo, he buscado y rebuscado, y estoy seguro que es una tontería, pero no doy con la tecla. He revisado el foro, la ...
  #1 (permalink)  
Antiguo 22/05/2011, 09:47
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Error en consulta o conexión con una clase.

Pues eso mismo, he buscado y rebuscado, y estoy seguro que es una tontería, pero no doy con la tecla.

He revisado el foro, la pagina oficial, etc...

El caso es que una clase que en principio estaba configurada para usarla con PostgresSQL, al intentar configurarla con MySQL me da error.

A ver si alguien puede orientarme sobre como poner las líneas para que no de error.

Gracias de antemano.

La conexión:
Código PHP:
   private static function _getConnection() {
      static 
$hDB;
      static 
$con;

      if(isset(
$hDB)) {
         return 
$hDB;
      }
      
// Esta es la que estaba anteriormente
      //$hDB = pg_connect("host=localhost port=5432 " . "dbname=namedb user=userdb password=passdb")
      
$con mysql_connect('localhost' 'user''pass');
      
$hDB mysql_select_db('db'$con)
         or die(
"Ha fallado la conexión con la Base de Datos!");
      return 
$hDB;
  } 
En esta parte es donde me salta el error:
Warning: mysql_query() expects parameter 2 to be resource, string given in /../class.DataManager.php on line 158
No se pudo llegar a todas las entidades
Código PHP:
  public static function getAllEntitiesAsObjects() {
    
$sql "SELECT \"entityid\", \"type\" from \"entity\"";
    
$res mysql_query(DataManager::_getConnection(), $sql);
    if(!
$res) {
      die(
"No se pudo llegar a todas las entidades");
    }... 
Entiendo que no pasa el if, pero no se si el error es de la consulta o es de la conexión.

Me da que es de la conexión, ya que en otros archivos la tengo configurada de forma similar y funciona (creo), pero dentro de la clase creo que se comporta de forma distinta.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #2 (permalink)  
Antiguo 22/05/2011, 09:51
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Error en consulta o conexión con una clase.

Depura tus consultas para que veas exactamente donde está el problema usa mysql_error.
Código PHP:
Ver original
  1. mysql_query('aqui va tu consulta') or die(mysql_error());
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 22/05/2011, 10:10
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Error en consulta o conexión con una clase.

Cita:
Iniciado por abimaelrc Ver Mensaje
Depura tus consultas para que veas exactamente donde está el problema usa mysql_error.
Código PHP:
Ver original
  1. mysql_query('aqui va tu consulta') or die(mysql_error());
Sale el error que indicaba antes.
Warning: mysql_query() expects parameter 2 to be resource, string given in /../class.DataManager.php on line 158

Que es la línea " $res = mysql_query(DataManager::_getConnection(), $sql); " del segundo code que he puesto.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #4 (permalink)  
Antiguo 22/05/2011, 10:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Error en consulta o conexión con una clase.

Pues lo que te indica que espera un resource y tu le estás brindando un string. Verifica que $sql te devuelva un resource no un string.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 22/05/2011, 12:10
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Error en consulta o conexión con una clase.

Cita:
Iniciado por abimaelrc Ver Mensaje
Pues lo que te indica que espera un resource y tu le estás brindando un string. Verifica que $sql te devuelva un resource no un string.
La variable es esta, como se puede hacer para que devuelva un resource?
Código PHP:
$sql 'SELECT entityid , type FROM entity'
El mysql_error() no me devuelve nada de errores en texto. pero si hay un error pues sale el mensaje que hay en "or die"

Lo puse como indicaste:
Código PHP:
$res mysql_query(DataManager::_getConnection(), $sql
            or die (
'Ha fallado mysql_query (' mysql_error() . ')'); 
pero solo me sale el mensaje "Ha fallado mysql_query ()"

Por otra parte fijandome en otras clases como conectan con mysql lo he puesto de esta forma:
Código PHP:
   private static function _getConnection() {
      static 
$hDB;
      static 
$cDB;
      static 
$dDB = array('localhost''user''pass''database');

      if(isset(
$hDB)) {
         return 
$hDB;
      }

      
$cDB mysql_connect(!$dDB[0]?'localhost':$dDB[0],$dDB[1],$dDB[2]) 
              or die (
'Datos de conexion al servidor mal (' mysql_error() . ')');
      
$hDB mysql_select_db($dDB[3], $cDB
              or die (
'Ha fallado la conexión con la Base de Datos! BD o conexion con el servidor, erronea (' mysql_error() . ')');
      return 
$cDB&&$hDB?$cDB:false;
  } 
Al hacer esto el error que me da el "error_reporting" ha cambiado de:
Warning: mysql_query() expects parameter 2 to be resource, string given in /../class.DataManager.php on line 158

a:
Warning: mysql_query() expects parameter 1 to be string, resource given in /../class.DataManager.php on line 158

No se si ha mejorado o a empeorado...

Gracias por tu tiempo abimaelrc
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #6 (permalink)  
Antiguo 22/05/2011, 12:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Error en consulta o conexión con una clase.

Ok, primero corrije el mysql_query, porque el primer valor debe ser la consulta tipo string y el segundo el resource. Y luego corrige DataManager::_getConnection() porque debes enviar un resource no un string. Y por último, usa mejor PDO (aunque creo que debía ser la primera sugerencia ), si vas a usar clases es la mejor opción.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 22/05/2011, 12:38
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Error en consulta o conexión con una clase.

Cita:
Iniciado por abimaelrc Ver Mensaje
Ok, primero corrije el mysql_query, porque el primer valor debe ser la consulta tipo string y el segundo el resource. ...

Y por último, usa mejor PDO (aunque creo que debía ser la primera sugerencia ), si vas a usar clases es la mejor opción.
Ehy!! ahí estaba el error, tenía primero la conexión y después la consulta...

Sobre el tema PDO, leeré un poco sobre ese tema, ya me lo han recomendado en varias ocasiones.

El tema es que como estoy experimentando el tema de clases y quiero conocer sus distintas opciones. Pero si eso facilita las conexiones pues bienvenida sea!

Gracias de nuevo abimaelrc,
Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Etiquetas: 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 19:38.