Foros del Web » Programando para Internet » PHP »

Error de syntax en WHERE o_o

Estas en el tema de Error de syntax en WHERE o_o en el foro de PHP en Foros del Web. Código PHP: <?php $conn  =  mysql_connect ( "localhost" ,  "root" ,  "root" ); if (! $conn ) {     echo  "Unable to connect to DB: "  .  mysql_error ();     exit; } if (! mysql_select_db ...
  #1 (permalink)  
Antiguo 29/12/2007, 01:01
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Error de syntax en WHERE o_o

Código PHP:
<?php
$conn 
mysql_connect("localhost""root""root");

if (!
$conn) {
    echo 
"Unable to connect to DB: " mysql_error();
    exit;
}

if (!
mysql_select_db("ragnarok")) {
    echo 
"Unable to select ragnarok: " mysql_error();
    exit;
}

$result mysql_query("SELECT id,email FROM char WHERE name = 'Erid'");
if (!
$result) {
    echo 
'Could not run query: ' mysql_error();
    exit;
}
$row mysql_fetch_row($result);

echo 
'Nombre: ' $row[0];
echo 
'Puntos: ' $row[1];
?>
Ese es el código que uso y me muestra el siguiente error >.<:

Cita:
Could not run query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'char WHERE name = 'Erid'' at line 1
¿Qué puede ser?, no me parece que haya error D:!, pero como no sé tanto de esto como quisiera, les agradecería mucho la ayuda.

Mi versión de MySQl es 5.0.45, uso el appserv
  #2 (permalink)  
Antiguo 29/12/2007, 01:08
Avatar de j_aroche
Server Ninja
 
Fecha de Ingreso: agosto-2006
Ubicación: iPhone: 14.624481,-90.487457
Mensajes: 2.066
Antigüedad: 17 años, 8 meses
Puntos: 223
Re: Error de syntax en WHERE o_o

El problema es que la palabra char es una palabra reservada de mysql. Para que no de problemas debes escribir tu consulta así:

Código:
SELECT id,email FROM `char` WHERE name = 'Erid'
Nota loa comillas. Aunque sería mejor renombrar esa tabla y otros campos que usen palabras reservadas ;)
  #3 (permalink)  
Antiguo 29/12/2007, 01:10
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Error de syntax en WHERE o_o

ya me había imaginado eso, por eso lo probé, ahora que me dijiste eso lo volví a escribir, y nada, el mismo error...

Cita:
Could not run query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''char' WHERE name = 'Erid'' at line 1
Debería probar lo de renombrar la tabla... pero tendría que cambiarla en demasiados lugares, debe haber otro método xD
  #4 (permalink)  
Antiguo 29/12/2007, 01:17
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
Re: Error de syntax en WHERE o_o

Comprueba que j_aroche te esta diciendo que uses comillas (backticks) para el nombre de tu tabla. Es decir, no es lo mismo ' que `.

Saludos.
  #5 (permalink)  
Antiguo 29/12/2007, 01:18
Avatar de j_aroche
Server Ninja
 
Fecha de Ingreso: agosto-2006
Ubicación: iPhone: 14.624481,-90.487457
Mensajes: 2.066
Antigüedad: 17 años, 8 meses
Puntos: 223
Re: Error de syntax en WHERE o_o

me parece que usaste la comilla simple (') en vez de la comilla especial (`) o tilde invertida... no se si tiene un nombre específico =P. intenta de nuevo y nos cuentas

EDIT: parece que con el tipo de letra no se distinge cual es cual.... en todo caso, has ctrl+c en la segunda ;)
  #6 (permalink)  
Antiguo 29/12/2007, 01:28
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Error de syntax en WHERE o_o

Discúlpenme, aún soy novato en esto ^^u... voy aprendiendo apenas, muchas gracias, funcionó genial, pero tengo otra duda.

En ese script hago que se muestre el nombre y los puntos, ¿cómo puedo hacer para aumentar en 1 los puntos?, y si es posible, que se puede hacer sólo cada 12 horas en una misma IP
  #7 (permalink)  
Antiguo 29/12/2007, 01:34
Avatar de j_aroche
Server Ninja
 
Fecha de Ingreso: agosto-2006
Ubicación: iPhone: 14.624481,-90.487457
Mensajes: 2.066
Antigüedad: 17 años, 8 meses
Puntos: 223
Re: Error de syntax en WHERE o_o

ok no hay problema ;)

Para lo otro, sería bueno si dieras más datos pero voy a ver si le atino a ciegas. Para actualizar una columa sumando 1 así misma:

Código:
UPDATE tabla SET columna = columna +1 WHERE primarykey= $id LIMIT 1
Y con el límite solo has un select del campo que contenga la fecha de la ultima vez que se actualizo el registro y lo comparas con la fecha actual.
  #8 (permalink)  
Antiguo 29/12/2007, 01:41
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Error de syntax en WHERE o_o

Código:
UPDATE `char` SET votepoints = votepoints +1 WHERE name= $id LIMIT 1
Con eso se suma 1 a la columna votepoints, donde la columna name tenga como valer $id, lo de limit 1 no lo entiendo bien o.o, ¿que no sea más de 1? xD

Discúlpame de nuevo, pero ni idea de como hacer lo último que dijiste >.<, si puedes guiarme un poco más, sino no hay problema, pero si puedes te lo agradecería muchísimo ^^

Edito: Habían cosas... que no entendí al leerlo D:, pero ya lo resolví xD

Última edición por Erid; 29/12/2007 a las 01:58
  #9 (permalink)  
Antiguo 29/12/2007, 02:04
Avatar de j_aroche
Server Ninja
 
Fecha de Ingreso: agosto-2006
Ubicación: iPhone: 14.624481,-90.487457
Mensajes: 2.066
Antigüedad: 17 años, 8 meses
Puntos: 223
Re: Error de syntax en WHERE o_o

Si, así sumara 1 a votepoints, solo hay que cambiar para que el valor de name quede entre comillas:

Código:
UPDATE table SET votepoints = votepoints +1 WHERE name='$id' LIMIT 1
La parte de LIMIT 1 es para asegurarse de que solo se modif¡que un registro a la vez, en caso de que dos registros tengan el mismo valor de campo name. Es una buena practica para no llevarse luego sorpresas ;)

Para lo otro veamos. Tienes guarda la ultima vez que sea actualizo votepoints en algun lugar, entonces será algo así:

Código:
SELECT ultimovoto FROM votes WHERE ip = "$ip"
luego con php haces algo así:

Código PHP:
if ( date('U',$ultimovoto) < ( time() - 43200) ) { 
//permitir voto 

el 43200 son 12 horas en segundos. La comparación es para saber si el ultimovoto fue hace más de 12 horas
  #10 (permalink)  
Antiguo 29/12/2007, 02:28
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Error de syntax en WHERE o_o

De eso ya sólo no sé como hacer para agregar la IP a la columna, busqué un poco en google pero no hallé mucho =/

Edito: Creo que es con $REMOTE_ADDR, me parece que ya me funcionó :3

Edit2:

Código PHP:
$result mysql_query("SELECT votepoints FROM `char` WHERE ip = '$REMOTE_ADDR'");
        if (!
$result) {
            echo 
'Could not run query: ' mysql_error();
            exit;
            }
    
$row mysql_fetch_row($result);
    
$ultimovoto=$row[0];

    if(
date('U',$ultimovoto) < ( time() - 43200) ) {
        
$result mysql_query("UPDATE `char` SET votepoints = votepoints +1 WHERE name= '$nick2' LIMIT 1");
        if (!
$result) {
        echo 
'Could not run query: ' mysql_error();
        exit;
        }
        
$result mysql_query("UPDATE `char` SET `ip` = '$REMOTE_ADDR' WHERE name= '$nick2' LIMIT 1");
        if (!
$result) {
        echo 
'Could not run query: ' mysql_error();
        exit;
        }
    }else{
        echo 
"No puedes votar más de 2 veces cada 12 horas";
    } 
x3, sorry, no me funciona, que será, si añade la IP 127.0.0.1, aunque no estoy seguro de sí es la IP que quiero que se guardem, aunque puede que como entro desde el mismo servidor... pero no me dice que no puedo hasta sino 12 horas D:

Última edición por Erid; 29/12/2007 a las 02:38
  #11 (permalink)  
Antiguo 29/12/2007, 13: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
Re: Error de syntax en WHERE o_o

Por practica es mas conveniente si usas los arreglos super globales, es decir en lugar de usar $REMOTE_ADDR; usa $_SERVER['REMOTE_ADDR'];.

Si estas entrando desde localhost (maquina de prueba) siempre te va a guardar 127.0.0.1 ya que esa es la ip local que tiene tu maquina.

Saludos.
  #12 (permalink)  
Antiguo 29/12/2007, 15:44
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Error de syntax en WHERE o_o

Muchas gracias, aunque creo que no funciona lo del tiempo =(
  #13 (permalink)  
Antiguo 29/12/2007, 16:31
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
Re: Error de syntax en WHERE o_o

No encuentro en que parte de tu codigo almacenas la fecha del ultimo voto, sin almacenar ese dato no puedes comparar si ya pasaron mas de 12 horas...

Saludos.
  #14 (permalink)  
Antiguo 29/12/2007, 16:39
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Error de syntax en WHERE o_o

Edito: Solucionado...

Sólo no sé si con $_SERVER['REQUEST_TIME'] si el usuario cambia la hora de su pc puede votar de nuevo ._., ya que creo que eso revisa su hora o.o, usé este código:
Código PHP:
if(date('U',$ultimovoto) < ( time() - 5) ) {
        
$result mysql_query("UPDATE `char` SET votepoints = votepoints +1 WHERE name= '$nick2' LIMIT 1");
        if (!
$result) {
        echo 
'Could not run query: ' mysql_error();
        exit;
        }
        
$result mysql_query("UPDATE `char` SET `ip` = '".$_SERVER['REMOTE_ADDR']."' WHERE name= '$nick2' LIMIT 1");
        if (!
$result) {
        echo 
'Could not run query: ' mysql_error();
        exit;
        }
        
$result mysql_query("UPDATE `char` SET `ultimovoto` = ".$_SERVER['REQUEST_TIME']." WHERE name= '$nick2' LIMIT 1");
        if (!
$result) {
        echo 
'Could not run query: ' mysql_error();
        exit;
        }
        echo 
"El envío ha sido exitoso";
    }else{
        echo 
"No puedes votar más de 2 veces cada 12 horas";
    } 
lo tengo para probarlo con 5 minutos.

Última edición por Erid; 29/12/2007 a las 17:11
  #15 (permalink)  
Antiguo 29/12/2007, 17:10
Avatar de j_aroche
Server Ninja
 
Fecha de Ingreso: agosto-2006
Ubicación: iPhone: 14.624481,-90.487457
Mensajes: 2.066
Antigüedad: 17 años, 8 meses
Puntos: 223
Re: Error de syntax en WHERE o_o

Lo debes hacer:

Código:
UPDATE tabla SET columna= NOW() WHERE ip="$ip" LIMIT 1
  #16 (permalink)  
Antiguo 29/12/2007, 17:13
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
Re: Error de syntax en WHERE o_o

Y tambien puedes enviar un UPDATE multiple:

Código:
UPDATE tabla SET columna1='valor1', columna2='valor2' WHERE ip='ip' LIMIT 1
Saludos.
  #17 (permalink)  
Antiguo 29/12/2007, 17:16
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Error de syntax en WHERE o_o

Gracias, eso funciona ya, me lo guarda en la tabla en Type datetime bien, pero cuando reviso con el código:

Código PHP:
if(date('U',$ultimovoto) < ( time() - 50) ) {
//Puede votar

Puedo votar cuanto quiera x3, ¿Alguna solución?
  #18 (permalink)  
Antiguo 29/12/2007, 17:40
Avatar de j_aroche
Server Ninja
 
Fecha de Ingreso: agosto-2006
Ubicación: iPhone: 14.624481,-90.487457
Mensajes: 2.066
Antigüedad: 17 años, 8 meses
Puntos: 223
Re: Error de syntax en WHERE o_o

y como estás cargando la fecha a $ultimovoto? la consulta y la forma en que lees la columna...
  #19 (permalink)  
Antiguo 29/12/2007, 17:53
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Error de syntax en WHERE o_o

Código PHP:
        $result mysql_query("SELECT ultimovoto FROM `char` WHERE `ip` = '" $_SERVER['REMOTE_ADDR'] . "'");
        if (!
$result) {
            echo 
'Could not run query: ' mysql_error();
            exit;
            }
    
$row mysql_fetch_row($result);
    
$ultimovoto $row[0]; 
En la tabla la fecha sale en modo Y-m-d H:i:s(ej. 2007-12-29 17:28:45)
  #20 (permalink)  
Antiguo 30/12/2007, 00:29
Avatar de Erid  
Fecha de Ingreso: diciembre-2007
Mensajes: 19
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Error de syntax en WHERE o_o

Solucionado... Guardé el tiempo con time() y funcionó, con NOW() el tiempo se guarda distinto o.o

Muchas Gracias por su ayuda!! n.n
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 12:55.