2010-10-07 4 views
11

Sono le 12:30 e sto codificando per 9 ore di fila. Ho davvero bisogno di portare a termine questo progetto, ma MySQL sta mettendo a posto la mia scadenza. Potresti esaminare questo frammento per me e vedere se riesci a scoprire cosa c'è che non va?Cosa c'è di sbagliato in questa query MySQL?

PHP/MySQL Query

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

continua a tornare il seguente errore ...

MYSQL errore [6 Ott 2010 23:31 CDT]
Hai un errore nella la tua sintassi SQL; controllare il manuale che corrisponde alla versione del server MySQL per la sintassi diritto di utilizzare vicino a '* FROM WHERE divieti ip =' 206.53.90.231 '' at line 1 (1064)

non vedo niente di sbagliato con il query. Ho anche provato diversi metodi per includere la variabile $ ip ma senza risultati.

EDIT:
solo aggiungere qui, la colonna diip nel mio database è un varchar (255).

MODIFICA 2:
Ecco l'intero codice interessato. Tieni presente che questo è tutto in una classe. Se mi manca qualcosa, fammi sapere.

linea da un'altra funzione

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

interessato Funzione

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; 
} 

funzione 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

Provare a stampare '$ ip' poco prima che la query – codaddict

+0

Strano, anche se avete fatto fuggire con' mysql_real_escape_string() 'nella classe database che non dovrebbe pregiudicare la stringa IP vostro errore sta parlando ... – BoltClock

+0

The la query sembra corretta, supponendo che non ci siano caratteri insoliti non stampabili. L'errore che sta vedendo è a '*. Presumo che la stringa sia tutta ASCII, non UTF-8? – cHao

risposta

7

Penso che possa essere E 'il vostro DELETE dichiarazione che è la causa del errore.

Rimuovere il * dopo il DELETE e dovrebbe andare bene.

+2

È definitivamente il 'DELETE' che sta causando il problema qui. –

+0

Oh mio Dio. Oggi stavo scrivendo troppe domande e non pensavo completamente al momento in cui si trattava di

DELETE
. Sì, questo ha risolto i miei problemi. Grazie mille per avermi aiutato in questo. –

+2

Questo è il nodo della storia! – Nirmal

0

Prova questo:

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

Che differenza farebbe a MySQL? – BoltClock

+0

Sì, esattamente quello che stavo pensando. –

+0

In realtà, lo standard SQL dice che i letterali delle stringhe DEVONO essere citati da una virgola, ma MySQL consente le doppie virgolette (le virgolette doppie nello standard SQL sono analoghe alle virgolette di MySQL). Questo potrebbe farti risparmiare qualche ora di grattacapo se usi un DBMS diverso. – imgx64

0

Verificare se si sta utilizzando il 'carattere o il' carattere (l'ultimo è un accento)

+1

L'errore è da qualche parte prima del * – Nirmal

+0

Sto usando 'not' ma non ha mai avuto importanza. –