2010-12-30 11 views
0

, wenn ich den Datensatz einfügen es mysql mich, was ist falsch mit dieser Abfrage

$sql = "insert into fish (fish_id,common_name,scientific_name,family,range,habitate,adult_size,identification,how_to_fish,image) values ('$com_name','$scientific_name','$family','$range','$habitate','$adult_size','$identification','$how_to_fish','$TARGET_PATH')"; 

der Fehler

Fehler geben

Daten konnten nicht in DB einfügen: Sie haben einen Fehler in der SQL-Syntax ; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe zu verwenden ‚range,habitate,adult_size,identification,how_to_fish,image) values ('Suwannee Ba‘ at line 1

wenn ich die Abfrage Dump zeigt es, dass alle Felder korrekt ausgefüllt sind.

string(737) "insert into fish (catch_id,common_name,scientific_name,family,range,habitate,adult_size,identification, 
how_to_fish,image) values ('','Suwannee Bass','Micropterus notius','Centrarchidae (Sunfish)','United States (Florida, Georgia)', 
'Freshwater: found in Suwannee and Ochlockonee river drainages of Florida and Georgia.', 
'Up to 12 oz (.34 kg).','The smallest of the Black Bass; brown with dark markings along back and sides. Adult male has blue cheeks, breast, and belly.', 
'Natural or artificial bait such as spinners, spoons, crankbaits, surface plugs, and plastic worms. Also can be caught via fly fishing using bugs, streamers, and bucktails. Live bait includes worms, crayfish, leeches, and minnows.', 
'localhost/fish/pics/Smallmouth bass.png')" 

zur Kenntnis, dass meine (catch_id) Auto increament ist und ich überprüft dies ohne catch_id Einfügen aber das gleiche Problem gibt es

+0

Stellen Sie sicher, dass Sie Ihre Variablen mit mysql_real_escape_string() geschützt haben. Andernfalls richten Sie sich für die SQL-Injektion ein. – BoltClock

Antwort

6

RANGE ist eine MySQL-reserviertes Wort, als solche müssen Sie Ihre range Feldnamen in Backticks wickeln, sonst MySQL wird verwirrt sein.

insert into fish (fish_id,common_name,scientific_name,family,`range`,habitate... 

Dann sollten Sie wiederum Ihren Tabellennamen und alle Feldnamen in Backticks einschließen. Oder benennen Sie das Feld range um, sodass Sie keine Backticks verwenden müssen.

+0

Ja, benutze '' range \ ''. Siehe http://dev.mysql.com/doc/mysqld-version-reference/de/mysqld-version-reference-reservedwords-5-1.html. –

+0

plus er sendet nicht fish_id in den Werten Teil der Abfrage, –

+0

@BoltClock +1 für den Bereich. –

0

Ihre Abfrage sollte mit

insert into fish (common_name,scientific_name 

Hinweis beginnen, dass ID-Feld ist hier nicht aufgeführt.

Wenn Ihr catch_id nicht NULL sein kann, sollten Sie seinen Wert int die zu Abfrage angeben:

insert into fish (catch_id,common_name,...) values (1/*catch_id*/,'$com_name',...) 
+0

Ich erwähne, dass ich mit catch_id überprüft, aber immer noch das gleiche Problem – hunter

+0

siehe @ BoltClocks Antwort, beantwortet er Ihre Frage. –

0

Sie geben 10 Felder an, jedoch nur 9

+0

Das Feld counts übereinstimmen –

+0

@Rowland Shaw: Scratch wirklich, sah es wieder und du hast Recht – BoltClock

+0

Ich zähle immer noch 9. fish_id ist nicht mit einem NULL-Wert für die Autoinkrement PK gegeben (zumindest das ist, was ich annehme) – DrColossos

1

RANGE ist ein MySQL-Schlüsselwort. Sie sollten alle Feld- und Tabellennamen in Anführungszeichen setzen:

`range` 
0

entweder u sollte das Tabellenfeld Name oder in Betrieb genommen `` ändern und
besser zu einer Zeit, eine andere Syntax des Einsetzens

eine einzelne Zeile zu verwenden,
$sql="INSERT INTO fish SET 
       common_name='$com_name', 
       scientific_name='$scientific_name', 
       family='$family', 
       `range`='$range', 
       habitate='$habitate', 
       adult_size='$adult_size', 
       identification='$identification', 
       how_to_fish='$how_to_fish', 
       image='$TARGET_PATH' "; 

ich denke, dies wird zu einer geringeren Fehlerwahrscheinlichkeit führen und wenn es dann aufgetreten ist dann einfach zu identifizieren.