2013-03-29 26 views
5

Continuo a ricevere il seguente errore da questa semplice istruzione mysql e non riesco a capire perché. sono sicuro che sia qualcosa di ovvio.MYSQL - Errore INSERT, colonna sconosciuta nell'elenco dei campi

require_once("connect.php"); 

$query = mysql_query("SELECT * FROM accounts ORDER BY id DESC LIMIT 1"); 
$row = mysql_fetch_assoc($query); 

$balanceold = $row['balance']; 
$difference = $_POST['predec'].".".$_POST['dec']; 

$category = $_POST['category']; 
$notes = $_POST['notes']; 

if(isset($_POST['in'])){ 
$balancenew = $balanceold + $difference; 
$query = mysql_query("INSERT INTO accounts(currentbalance, balancein, category, notes) VALUES (".$balancenew.", ".$difference.", ".$category.", ".$notes.")"); 
if($query){ 
header("Location: budget.php"); 
} 
else{ 
die(mysql_error()); 
} 
} 

dà errore: Unknown column 'giorno di paga' in 'lista campo'

Ecco il mio codice forma:

<form action=process.php method=post> 

&pound; 
<input type=text name=predec size=7> 
. 
<input type=text name=dec size=4 value=00> 
<br /> 
<select name=category> 
<option value=payday>Payday</option> 
</select> 
<input type=text name=notes size=20> 
<input type=submit name=in value=Deposit> 
<input type=submit name=out value=Withdraw> 
</form> 

tabella del database "conti" contiene i seguenti campi:

id, int primary A_I

balancein, decimale 10, 2

balanceout, decimale 10,2

saldo corrente, decimale 10,2

categoria, varchar 50

note, varchar 255

data, timestamp

. ..in questo ordine

+2

Il tuo codice HTML è irrilevante. Dovremo vedere la struttura della tabella del tuo database. –

+0

E il codice che imposta le variabili $ balancenew, $ difference, $ category, $ notes. – methai

+0

Si prega di mostrare il vostro codice PHP completo. –

risposta

13

provate questo (racchiudere ogni variabile all'interno di query con un'unica quota):

mysql_query("INSERT INTO accounts(currentbalance, balancein, category, notes) 
      VALUES ('$balancenew', '$difference', '$category', '$notes')"); 

è più opportuno utilizzare mysqli o PDO per evitare attacco SQL injection, si potrebbe usare mysql_real_escape_string() per ora:

$balancenew = mysql_real_escape_string($balancenew); 

e per altre variabili.

+0

I campi concordati, senza campo, possono causare errori strani come quello che hai menzionato. – methai

+0

i dati devono essere sfuggiti con una singola quota per dire a MySQL che non si tratta di un riferimento a una colonna. –

+1

'mysql_real_escape_string' *** *** non impedirà l'SQL injecti sopra. – Kermit

0

Fondamentalmente ciò che sql è dicendoti che stai facendo riferimento a una colonna nel tuo inserto che non è definita nel database. Fornisci la struttura della tabella o assicurati che il nome della colonna sia esattamente come definito nel db. HTH.

1

Questo perché si verifica un errore di sintassi nella query INSERT. I valori di stringa e data devono essere passati in virgolette singole e non virgolette doppie in sql. il . o il carattere di concatenazione delle stringhe non è richiesto. Quindi, sulla base dei dati che hai fornito potrebbe essere

$query = mysql_query("INSERT INTO accounts(currentbalance, balancein, category, notes) 
         VALUES ($balancenew, $difference, '$category', '$notes')"); 
+0

Sì e no. Il grosso problema qui è che questo è il modo sbagliato di comporre una query. – tadman

0

Hai perso le virgole singole invertite racchiudono $ note e $ categoria immagino. Racchiudili in 'e il tuo problema dovrebbe essere risolto.

Problemi correlati