Foros del Web » Programando para Internet » PHP »

Configurar error de mysql

Estas en el tema de Configurar error de mysql en el foro de PHP en Foros del Web. Como puedo hacer para que cuando vaya a actualizar una columna de la base datos, me salga el error que yo quiera?...
  #1 (permalink)  
Antiguo 13/07/2004, 08:32
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Configurar error de mysql

Como puedo hacer para que cuando vaya a actualizar una columna de la base datos, me salga el error que yo quiera?
  #2 (permalink)  
Antiguo 13/07/2004, 09:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 152
Antigüedad: 20 años, 5 meses
Puntos: 2
Puedes analizar esta clase elaborada con la informañcion de varios ejemplos, aun no esta terminada pero ya funciona.

Código PHP:
<?php
    
//    ********************************************************************* //

    //        CLASES MANEJO DE BASE DE DATOS                                  //
    //        Por : Edwin Fredy Mamani Calderon                               //
    //        email : [email][email protected][/email]                                       //
    //        web : [url]http://www.gruposistemas.com[/url]                                //
    //                                                                        //
    //        CMysqlDatabase : Conecta la base de datos y Hace Consultas,     //
    //                         Con varia funciones definidas                  //
    //        CMysqlResult : Maneja Registros de acurdo a CMysqlDatabase      //

    // ********************************************************************** //

    
function fun_Error($mensaje)
    {
        echo 
"<font color='#990000'><em>".$mensaje."</em></font>";
    }

    
define("CONFIGURACION_MYSQL_HOST",$db_host);
    
define("CONFIGURACION_MYSQL_DB",$db_data);
    
define("CONFIGURACION_MYSQL_USER",$db_user);
    
define("CONFIGURACION_MYSQL_PASS",$db_pass);


    
/////////////  CLASE CMYSLDATABASE -> Conecta con la Base de datos

    
class CMysqlDatabase
    
{
        var 
$m_idConeccion;
        var 
$m_idConsulta;
        var 
$m_HOST;
        var 
$m_USER;
        var 
$m_PASS;
        var 
$m_DB;

        function 
Open($database="",$user="root",$pass="",$host="localhost")
        {
            
$this->m_DB $database;
            
$this->m_USER $user;
            
$this->m_PASS $pass;
            
$this->m_HOST $host;

            if(
$this->m_idConeccion == 0)
            {
                
$this->m_idConeccion mysql_connect($this->m_HOST,$this->m_USER,$this->m_PASS);
                if(!
$this->m_idConeccion)
                {
                     
fun_Error("No se puede acceder : (\"$this->m_HOST\",\"$this->m_USER\",password)");
                    
$this->printError();
                    exit;
                }

                if(!
mysql_select_db($this->m_DB,$this->m_idConeccion))
                {
                    
fun_Error("No se puede conectar con la base datos : ".$this->m_DB);
                    
$this->printError();
                    exit;
                }
            }
            return 
true;
        }

        function 
Conectar()
        {
            return 
$this->Open(CONFIGURACION_MYSQL_DB,CONFIGURACION_MYSQL_USER,CONFIGURACION_MYSQL_PASS,CONFIGURACION_MYSQL_HOST);
        }

        function 
Consultar($sql="")
        {
                
$this->m_idConsulta mysql_query($sql,$this->m_idConeccion);
                if(!
$this->m_idConsulta)
                {
                    
printError("<b>Error en la Consulta :</b><br><br>");
                    return 
false;
                }
                return 
true;
        }

        function 
getConsulta()
        {
            return 
$this->m_idConsulta;
        }

        function 
getConeccion()
        {
            return 
$this->m_idConeccion;
        }

        function 
printError()
        {
                    echo 
"<br><br><b>Mysql Error</b> : ".mysql_errno($this->m_idConeccion)." (".mysql_error($this->m_idConeccion).") <br>\n";
        }

        function 
Insert($table,$campos="",$valores)
        {
            if(
substr_count($valores,"'")<=0)
            {
                    
$valores=addslashes($valores);

                    
$valores=str_replace(",","','",$valores);
                    
$valores "'".$valores."'";
            }

            if(empty(
$campos))
                
$sql "INSERT INTO $table VALUES($valores)";
            else
                
$sql "INSERT INTO $table($campos) VALUES($valores)";
//            echo $sql;
            
return $this->Consultar($sql);
        }
        function 
Update($table,$campos,$valores,$condicion)
        {
            
$valores str_replace("','","'_,_'",$valores);
            
            
$campos split(",",$campos);
            
$valores split("_,_",$valores);

            
$numcampos count($campos);
    
            
$sql "UPDATE $table SET ";
            for(
$i=0;$i<$numcampos;$i++)
            {
                if(
$i!=0)
                {
                    
$sql.=",";
                }
                
$sql.= $campos[$i]."=".$valores[$i];
            }
            
$sql.= " WHERE $condicion";
            
            return 
$this->Consultar($sql);
        }

        function 
Delete($table,$condicion="")
        {
            
$sql "DELETE FROM $table";
            if(!empty(
$condicion))
            {
                
$sql.= " WHERE $condicion";
            }
            return 
$this->Consultar($sql);
        }
    }


    
//////////////// CMYSQLRESULT -> Maneja los Registros de una consulta

    
class CMysqlResult
    
{
        var 
$m_Result;
        var 
$m_Rows;
        var 
$m_Cols;
        var 
$m_currentRow;
        var 
$m_Registro = array();

        function 
Open($cmysqldatabase)
        {
            
$this->m_Result $cmysqldatabase->getConsulta();
            
$this->m_Rows mysql_num_rows($this->m_Result);
            
$this->m_currentRow 0;
            
//$this->m_Registro = mysql_fetch_array($this->m_Result);
            
$m_Cols mysql_num_fields($this->m_Result);
        }

        function 
fetchArray()
        {
            if(
$this->m_currentRow<$this->m_Rows)
            {
                
$this->m_Registro mysql_fetch_array($this->m_Result);
                
$this->m_currentRow++;
                return 
true;
            }
            return 
false;
        }

        function 
moveFirst()
        {
            
$this->m_currentRow=0;
            
mysql_data_seek($this->m_Result,$this->m_currentRow);
            return 
true;
        }

        function 
moveLast()
        {
            
$this->m_currentRow $this->m_Rows-1;
            
mysql_data_seek($this->m_Result,$this->m_currentRow);
            
$this->m_Registro mysql_fetch_array($this->m_Result);
            return 
true;
        }

        function 
getDato($campo)
        {
            return 
stripslashes($this->m_Registro[$campo]);
        }
        function 
getDatoRow($row,$campo)
        {
            return 
stripslashes(mysql_result($this->m_Result,$row,$campo));
        }

        function 
getRows()
        {
            return 
$this->m_Rows;
        }
        function 
getCurrentRow()
        {
            return 
$this->m_currentRow;
        }
    }
?>
__________________
Mamani Calderón, Edwin Fredy
Ingeniería de Sistemas www.gruposistemas.com
  #3 (permalink)  
Antiguo 13/07/2004, 09:05
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
lo siento pero no me he enterado de nada.... haver si me lo podrias simplificar un poquito, tengo este còdigo:
Código PHP:
<?php
$actuacion 
$_COOKIE['ID'];
mysql_select_db($database_teatredelmar$teatredelmar);
$query_actuacio "UPDATE ocupacioestat SET $cadires_compr WHERE ID = $actuacion"
mysql_query($query_actuacio$teatredelmar) or die(mysql_error());
?>
y lo que quiero es que cuando esa columna no exista me diga: Error, este lugar no existe.
y cuando los datos de alguna columna sean =2: Error, este lugar ya esta comprado
  #4 (permalink)  
Antiguo 13/07/2004, 09:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. ese "mensaje" vendrá dado por cierta circustancia (condiciones). .. cuales serían?

Y que es "actualizar una columna"? .. será un UPDATE tabla SET campo='valor' ?

Un saludo,
  #5 (permalink)  
Antiguo 13/07/2004, 09:18
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Las condiciones del primer mensaje serian que algun campo no exista, vamos que si tengo "ID, Fecha, Nombre". Que "Nombre" no exista, y en este caso me muestre este campo no existe, o si en ID, Fecha, Nombre, alguno de estos tenga valor 2 que diga que ya tiene el valor 2.

Por cierto el
$cadires_compr = ID=2, Fecha =2, Nombre =2
  #6 (permalink)  
Antiguo 13/07/2004, 09:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Según parece (podrías haberlo explicado antes):

Tu "columna" (ahora: campo) .. es: $cadires_compr que pertenece a la tabla 'ocupacioestat'

Si quieres comprobar si ese campo existe en tal tabla .. puedes usar la función:
mysql_list_fields()
www.php.net/mysql_list_fields
(con esta función obtienes todos los nombres de los campos de esa tabla indicada ..ahí ya te aplicarás tu "if()" ...)

-----

Para el tema de: "y cuando los datos de alguna columna sean =2: Error, este lugar ya esta comprado"

Tienes que hacer una consulta SQL a tu tabla 'ocupacioestat' de tipo SELECT condicional ..

Código PHP:
$sql="SELECT COUNT(*) FROM ocupacioestat WHERE $cadires_compr ='2'"
Eso te devolverá el número de registros que el campo $cadires_compr = '2' de tu tabla ocupacionstat .. Si es > 0 ya podrás mostrar tu mensaje como corresponda.

Código PHP:
if (mysql_result($resultado,0) > 0){
echo 
"mensaje tal";

Un saludo,
  #7 (permalink)  
Antiguo 13/07/2004, 09:50
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Muchas gracias.
Pero soy un poco patoso con las cosas nuevas hasta que me habituo.
Como puedo poner 2 condiciones en where?
necesito poner:
$cadires_compr ='2'
ID=$ID

y no he entendido como debo hacer lo de saber si los campos existen.... imaginate que debo saber si los campos C2, C3, C4, C5, C6 existen y los C3 y los C4 no existen. Como puedo hacer eso? no entiendo como se usa ni que respuesta da el mysql_list_fields()
  #8 (permalink)  
Antiguo 13/07/2004, 10:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues usa un "AND" en tu SQL ...

SELECT * FROM tabla WHERE campo='tal' AND otro_campo='otracosa'

Te hace falta entonces olvidarte por el momento de "PHP" y centrarte en manuales de SQL:

www.mysql-hispano.com

Ahí puedes encontrar buenos tutoriales. Te los recomiendo no sólo por ver la sintax concreta de "SELECT" (que la puedes ver también en www.mysql.com) sino por el "diseño de tu BD" en sí .. creo que deberías ver un poco el tema de "normalización" (que ahí mismo veras un tutorial) para enfocar mejor como organizar tus datos y estructurarlos mejor.

------
El tema de mysql_list_fields() si te fijastes en el link que dejé del manual oficial de PHP tienes un generoso ejemplo .. pruebalo. Esa función te va a listar los campos de tu TU tabla (la que indiques) con las técnicas (ese bucle) que ahí mismo veras en el ejemplo.

Un saludo,
  #9 (permalink)  
Antiguo 13/07/2004, 12:08
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
No veo ningun manual en esa web de mysql-hispano, y please me podrias decir alguna pàgina donde esten todos los parametros para php, y mysql que se pueden usar? por ejemplo el count(), mysqlresult()...

muchisimas gracias por esta atención
  #10 (permalink)  
Antiguo 13/07/2004, 13:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Con respecto a las funciones de PHP para Mysql:

www.php.net/mysql

Y sobre el lenguaje SQL particular de Mysql:
http://dev.mysql.com/

En la web de mysql-hispano (poco tiempo le dedicastes .. parece ser):
http://www.mysql-hispano.org/articles.php

Ahí tienes todo lo que te he mencionado (y en castellano).

Un saludo,
  #11 (permalink)  
Antiguo 15/07/2004, 04:14
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
No entiendo como puedo hacer lo de ver si el campo existe en la tabla?? please ayuda
  #12 (permalink)  
Antiguo 18/07/2004, 07:51
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Sigo = ahora estoy haciendo lo de cuando haya algun campo k no se modifique con el if i el where = 2 pero me da error, he puesto lo siguiente:

Código PHP:
mysql_select_db($database_teatredelmar$teatredelmar);
$query_vermell="SELECT COUNT(*) FROM ocupacioestat WHERE $cadires_compr =2";
mysql_query($query_vermell$teatredelmar) or die(mysql_error());
if (
mysql_result($resultado,0) > 0){ 
echo 
"mensaje tal"

Contestad rapido please
  #13 (permalink)  
Antiguo 19/07/2004, 06:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
¿Como quieres que te contesten rápido si dices "me dá un error" y no pones que error te dá?

Si quieres rapidez y sobre todo "acierto" en las respuestas tendrás que -siempre- aportar más datos sobre tu problema, como por ejemplo ese "error que te dá".

Un saludo,
  #14 (permalink)  
Antiguo 19/07/2004, 09:44
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
No estoy diciendo que me da un error, sino que quiero que me de un error cuando el campo ya este actualizado
  #15 (permalink)  
Antiguo 19/07/2004, 09:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Vamos a ver si nos aclaramos todos:

¿Comprendes que el objetivo de "dar o no un error" se trata de hacer una consulta SQL bajo el critério (condición) que tu definas?

¿Comprendes que para averigüar si tu consulta SQL puedes obtener el nº de registros que arroja tu consulta "condicional" y en función de ese resultado (con COUNT(*) de del SQL de Mysql ?

También puedes obtener el nº de registros que arroja una consulta con mysql_num_rows() pero es más optimo usar COUNT() si realmente sólo quieres obtener ese dato y no vas a usar sus posibles resultados.

Bien . .si eso está claro .. ¿que es lo que quieres hacer ahora? .. Explicate mejor . .pon ejemplos .. en fin .. que lo pongas fácil para quien pretenda ayudarte.

Un saludo,
  #16 (permalink)  
Antiguo 19/07/2004, 10:59
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Si, todo eso esta claro, la duda que tengo es como lo puedo hacer para definir el resultado del count(*) en una variable para poder hacer el if() corresponiente.

Mi principal problema es que no se como usar el dato de count(*) después de hacer la consulta
  #17 (permalink)  
Antiguo 19/07/2004, 13:39
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 19 años, 9 meses
Puntos: 0
por todas las variables que usas no entiendo tu query de SQL asi que generalice uno, haber si te funciona.

si cuando quieres hacer el |update este campo ya ya tiene 2 te va a mandar un error de MySQL el cual puedes configurar a tus necesidades.

aunque te dire que tu problema no no me queda claro, es basicamente lo que entendi.

Código PHP:
$SQL="UPDATE tabla SET campo = ".$variable." WHERE ID = "$ID." AND otrocampo <> 2";  

$conex mysql_connect("localhost","user","password") or die ("no se pudo conectar???");
  
mysql_select_db("basededatos"$conex);
  
$resultado mysql_query($SQL,$conex);

if (
$resultado !=1){ 
echo 
"mensaje de error"

Suerte
__________________
Shanti Castillo G.
  #18 (permalink)  
Antiguo 19/07/2004, 14:03
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Tengo el siguiente codigo:
Código PHP:
 // *********************************************************
// *** Conectamos con la base de datos para actualizarla ***
// *********************************************************
mysql_select_db($database_teatredelmar$teatredelmar);
$query_actuacio "UPDATE ocupacioestat SET $cadires_actualizar WHERE ID = $actuacion "
$resultado mysql_query($query_actuacio$teatredelmar) or die(mysql_error()); 
la variable $carides_actualizar: C2 =2, C3 =2, C4=2.
y lo que quiero es que si algun campo (C2, C3, C4....) ya tenga el valor 2 me de error.
  #19 (permalink)  
Antiguo 19/07/2004, 14:43
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
La verdad es que te haces entender muy poco.
Cluster ya te ha explicado casi todo.

Te propongo que hagas una secuencia de lo que quieres que pase. Tu secuencia sería algo como:
Averiguar si alguno de los campos ya tiene valor = 2. Si lo tiene, dar un mensaje de error. Si no, recién hacer el UPDATE.... simple verdad?.
Código PHP:
//Sentencia en la que verificas si ya existe:
$sql "SELECT * FROM ocupacioestat WHERE ID='$actuacion' AND (C1=2 OR C2=2 OR C3=2 OR C4=2)";
$result mysql_query($sql);
if(
$row mysql_fetch_aray($result)){
   
//mensaje de error
   
echo "ERROR!";
}else{
   
//Recién aquí haces el UPDATE
   
$query_actuacio "UPDATE ocupacioestat SET $cadires_actualizar WHERE ID = $actuacion ";
   
$resultado mysql_query($query_actuacio$teatredelmar) or die(mysql_error());
}; 
Algo así. Espero te sira.

Saludos
  #20 (permalink)  
Antiguo 19/07/2004, 14:45
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
También ten en cuenta que por temas de eficiencia deberías utilizar mejor el COUNT(*), como ya te explicó bien Cluster. Pero la idea es la misma.

Saludos
  #21 (permalink)  
Antiguo 19/07/2004, 16:23
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Por fin me funciona!!! muchisimas gracias! bueno... pero para la pròxima vez me puedes explicar para que sirve esto de:
if($row = mysql_fetch_array($resultado_1)){

Gracias
  #22 (permalink)  
Antiguo 19/07/2004, 16:31
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Código PHP:
$row mysql_fetch_aray($result
Devolverá un array con la primera fila de resultados. Si no hay resultados, devolverá false. Al pasarlo por el "if". Es como preguntar ¿Se encontró algún registro que cumpla la condición?

En realidad el ejemplo lo puse para salir del paso. Podrías utilizar alguna función como mysql_num_rows() que te devuelve el número de registros encontrados en la consulta. Si es diferente de cero , mensaje de error. Si es cero, es porque no se encontró ninguno, entonces haces el update.
Código PHP:
//Sentencia en la que verificas si ya existe:
$sql "SELECT * FROM ocupacioestat WHERE ID='$actuacion' AND (C1=2 OR C2=2 OR C3=2 OR C4=2)";
$result mysql_query($sql);
if(
mysql_num_rows($result)!=0){
   
//mensaje de error
   
echo "ERROR!";
}else{
   
//Recién aquí haces el UPDATE
   
$query_actuacio "UPDATE ocupacioestat SET $cadires_actualizar WHERE ID = $actuacion ";
   
$resultado mysql_query($query_actuacio$teatredelmar) or die(mysql_error());
}; 
Saludos
  #23 (permalink)  
Antiguo 19/07/2004, 16:33
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Ahora, la función COUNT() de mysql ya te devuelve directamente el número de registros encontrado y eso es más eficiente aún que dejarle la tarea al php (mysql_num_rows()).

Saludos
  #24 (permalink)  
Antiguo 19/07/2004, 16:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La función mysql_fetch_array() devuelve un "false" si no pudo ejecutar la consulta y un "true" si la ejecutó .. a su vez como se usa el "=" (no ==) se está asignando el posible resultado a $row (para que lo uses $row['campo']) si quieres ...

El "secreto" de tu problema más bien era de SQL y ese montón de (C1=2 OR C2=2 OR C3=2 OR C4=2)"; (que por mi parte nunca entendí por qué nunca pusistes la estructura de tus tablas .. para otra vez si la pones todo quedaría más claro).

Ahora si quieres podrías probar el COUNT(*) como más arriba comenté y puse su código de uso pero con la sentencia SQL que dió jpinedo.

Un saludo,
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 03:30.