2012-04-04 3 views
1

Ich erhalte diesen Fehler hier ist mein CodeFehler: Spaltenanzahl Zählwert nicht in Zeile passen 1

if(isset($_POST['submit'])) 
    { 
    $projTit=mysql_escape_string($_POST['projecttitle']); 
    $projCat=mysql_escape_string($_POST['projectcategory']); 
    $budget=intval(mysql_escape_string($_POST['budget'])); 
    $description=mysql_escape_string($_POST['editor1']); 
    $query=sprintf("insert into projects value('%s','%s','%s',%d)", 
      $projTit,$description,$projCat,$budget); 
    if (!mysql_query($query)){ 
     die('Error: ' . mysql_error()); 
     } 
     echo '<p class="record">Your Record has been Added<p>'; 
    } 

    ?> 

Ich habe versucht,% d in '' zu schreiben, aber immer noch nicht funktioniert.

+0

Wie ist Ihre Tabellenstruktur? Wenn Sie keinen Spaltensatz angeben, müssen Sie Werte für alle Spalten angeben. – Interrobang

+0

@Interrobang Entschuldigung, ich habe nicht verstanden, was ist ein Spaltensatz Lassen Sie mich meine Tabellenstruktur anzeigen –

+0

Sorry, ich meine, wenn Sie nicht angeben, welche Spalten Sie einfügen (mit Syntax wie 'INSERT INTO Tabelle (col1, col2, col3) VALUES (val1, val2, val3) ') Dann müssen Sie Werte für * alle * Spalten angeben :) – Interrobang

Antwort

4

Ihre Tabelle hat fünf Spalten. Sie geben jedoch keinen Wert für die Project_Id-Spalte an. Dies gibt Ihnen den Fehler, den Sie erwähnten.

Ich verstehe, dass Sie keinen Wert angeben, da es wahrscheinlich ein PRIMARY KEY Autoincrements ist. Um MySQL mitzuteilen, dass Sie absichtlich keinen Wert für die Spalte übergeben, sollten Sie NULL als ersten Wert hinzufügen.

value(NULL, '%s','%s','%s',%d) 

Allerdings sollten Sie wirklich speziell nennen, welche Spalten in den Fall einfügen Sie eine neue Spalte zu einem späteren Zeitpunkt hinzufügen.

INSERT INTO projects (col1, col2, col3, col4) value ('%s','%s','%s',%d) 
+0

Danke für Hilfe, es funktioniert. –

1

versuchen, die Spalten zu benennen Sie wie

insert into projects (col1, col2, col3) values (...) 
+0

ja Benennung der Spalten ich bin in der Lage, Werte hinzufügen, danke für Hilfe. –

2

füllen wollen, sollten Sie wirklich die Spaltennamen angeben oder Ihre App wird brechen, wenn Sie später eine Spalte hinzufügen, selbst wenn es ein brauchbarer Standardwert:

INSERT INTO projects 
    (Project_Title, Project_Description, Project_Category, Project_Budget) 
VALUES 
    (...) 

Vor allem, da Sie einen auto_increment ID-Spalte es m haben Akes Sinn; Andernfalls müssten Sie es immer als NULL in Ihrer Abfrage angeben.

Die einfachste (aber auch hässlichste) fix wäre also:

$query=sprintf("insert into projects value (null, '%s','%s','%s',%d)", 
     $projTit,$description,$projCat,$budget); 

Die gute fix sein würde:

$query = sprintf(" 
    INSERT INTO projects 
     (Project_Title, Project_Description, Project_Category, Project_Budget) 
    VALUES 
     ('%s', '%s', '%s', %d) 
    ", $projTit,$description,$projCat,$budget); 

By the way, betrachten PDO verwenden - dann können Sie etwas verwenden ähnlich wie eine Formatzeichenfolge, muss aber nicht mit dem Escaping umgehen.

+0

Falsch. "VALUE ist in diesem Kontext ein Synonym für VALUES. Das bedeutet nichts über die Anzahl der Wertelisten, und beide können verwendet werden, unabhängig davon, ob es eine einzelne Werteliste oder mehrere Listen gibt." http://dev.mysql.com/doc/refman/5.5/en/insert.html – Interrobang

+0

@Interrobang: Aktualisiert. – ThiefMaster

+0

indem Sie den Spaltennamen nicht angeben und den Wert zu Werten ändern, funktioniert immer noch nicht. –

Verwandte Themen