2010-10-07 12 views
11

Son las 12:30 a.m. y he estado codificando durante 9 horas seguidas. Realmente necesito terminar este proyecto, pero MySQL está jugando con mi fecha límite. ¿Podrías examinar este fragmento para mí y ver si puedes descubrir qué está mal?¿Qué hay de malo con esta consulta de MySQL?

PHP/MySQL Query

$q = $this->db->query("SELECT * FROM bans WHERE ip='".$ip."'"); 

sigue volviendo el siguiente error ...

MYSQL Error [OCT sexto, 2010 23:31 CDT]
Usted tiene un error en su sintaxis SQL; compruebe el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de '* de prohibiciones DONDE IP = 206.53.90.231' '' en la línea 1 (1064)

No veo nada malo con el consulta. Incluso probé diferentes métodos para incluir la variable $ ip, pero no sirvió para nada.

EDIT:
sólo para añadir aquí, la columna de la ip en mi base de datos es un varchar (255).

EDIT 2:
Aquí está todo el código afectado. Tenga en cuenta que esto es todo en una clase. Si me falta algo, házmelo saber.

Línea de otra función

if($this->isBanned($_SERVER['REMOTE_ADDR'])===true) { return json_encode(array('error'=>'You are banned from this ShoutBox.')); } 

afectado Función

function isBanned($ip) { 
    $q = $this->db->query("SELECT * FROM bans WHERE ip='".$ip."'"); $num = $this->db->affected_rows; 
    if($num>0) { $row = $this->db->fetch_array($q); if(($row['expires'] < time()) && ($row['expires'] !== 0)) { $this->unbanUser($ip,'internal'); return false; } return true; } return false; 
} 

función unbanUser

function unbanUser($ip,$t='box') { 
    $q = $this->db->query("SELECT * FROM bans WHERE ip='".$ip."'"); $num = $this->db->affected_rows; if($num>0) { $q = $this->db->query("DELETE * FROM bans WHERE ip='".$ip."'"); 
    return (($t=='box') ? json_encode(array('status'=>'removed')) : true); } else { return (($t=='box') ? json_encode(array('error'=>'Unable to locate the user.')) : true); } 
} 
+0

Intente imprimir '$ ip' justo antes de la consulta – codaddict

+0

extraño, incluso si se le escapó que con' mysql_real_escape_string() 'en la clase de base de datos que no debería afectar a la cadena de IP de su error está hablando de ... La – BoltClock

+0

la consulta se ve correcta, suponiendo que no hay caracteres extraños que no sean de impresión. El error que está viendo está en el '*'. Supongo que la cadena es todo ASCII, no UTF-8? – cHao

Respuesta

7

Creo que puede ser Es su DELETE declaración que está causando el error.

Quite el * después del DELETE y debería estar bien.

+2

Definitivamente es el "DELETE" que está causando el problema aquí. –

+0

Oh dios mio Estaba escribiendo demasiadas consultas hoy y no pensaba con claridad cuando se trataba de

DELETE
. Sí, eso solucionó mis problemas. Muchas gracias por ayudarme en esto. –

+2

¡Ese es el nudo en la historia! – Nirmal

0

Prueba esto:

$q = $this->db->query('SELECT * FROM bans WHERE ip="' . $ip . '"'); 
+2

¿Qué diferencia haría eso a MySQL? – BoltClock

+0

Sí, exactamente lo que estaba pensando. –

+0

En realidad, el estándar SQL dice que los literales de cadena DEBEN ser de comillas simples, pero MySQL permite comillas dobles (las comillas dobles en el estándar de SQL son análogas a las citas de atrás de MySQL). Esto podría ahorrarle pocas horas de rascado de cabeza si alguna vez usa un DBMS diferente. – imgx64

0

Comprobar si está utilizando el "carácter o el" carácter (el último es un acento)

+1

El error está en algún lugar antes del * – Nirmal

+0

Estoy usando 'no' pero nunca ha importado. –

Cuestiones relacionadas