2009-03-24 7 views
0

Bär mit mir bin ich ein bisschen neu für all dies,MYSQL ERROR

Ich habe diese Abfrage in meinem PHP-Skript ausgeführt wird:

$insertQuery = "INSERT INTO blog_articles 
    VALUES '$title', $tags', '$category', '$blog', '$author', '$date'"; 

ich dann dieses Skript ausführen:

if ($result = $connector->query($insertQuery)){ 
    // It worked, give confirmation 
    echo '<center><b>Article added to the database</b></center><br>'; 
}else{ 
    // It hasn't worked so stop. Better error handling code would be good here! 
    die (mysql_error()); 
} 
} 

Ich bekomme diesen Fehler:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Title Number 1, General, Blogging, Kayaking, General, Tgis is blog number spelli' at line 2

Aber ich kann nicht te ll was ist der Fehler, es sieht gut aus, wenn jemand mir helfen könnte das wäre toll danke

Antwort

4

Ihre Abfrage sollte mehr sein wie diese

INSERT INTO blog_articles (`title`, `tags`, `category`, `blog`, `author`, `date`) 
VALUES ('$title', '$tags', '$category', '$blog', '$author', '$date') 

Sie sollten auch in desinfizierende Ihre Anfrage suchen. Vielleicht ist diese Art und Weise (aber ich weiß nicht, Ihre genaue Setup, so dass die Ergebnisse variieren können)

$sql = sprintf("INSERT INTO blog_articles (`title`, `tags`, `category`, 
    `blog`, `author`, `date`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')", 
mysql_real_escape_string($title), mysql_real_escape_string($tags), 
mysql_real_escape_string($category), mysql_real_escape_string($blog), 
mysql_real_escape_string($author), mysql_real_escape_string($date)); 

Dies verwendet die sprintf() Funktion, die PHP-Dokumentation hat einige großartige Beispiele.

+0

Funktioniert perfekt, könnten Sie die Verweise '% s' erklären, verstehe ich diese nicht? –

+0

% s bedeutet String-Ausgabe. – OIS

6

Sie haben ein einzelnes Zitat fehlt vor $ Tags.

0

Sie müssen die Namen der Felder hinzuzufügen, die Sie

INSERT INTO blog_articles ('title', 'tags', 'category', 'blog', 'author', 'date') VALUES ('$title', '$tags', '$category', '$blog', '$author', '$date') 

Auch einfügen sollten Sie einige Code zu entkommen Doppel- oder Apostroph in Ihrem Text hinzufügen, die die SQL-Abfrage brechen könnte.

die PHP-Funktion mysql_real_escape_string() verwenden

mysql_real_escape_string() ruft MySQLs Bibliotheksfunktion mysql_real_escape_string, die Schrägstriche auf die folgenden Zeichen prepends: \ x00, \ n \ r, \,‘,", und \ X1a.

Für weitere Informationen:. http://uk.php.net/mysql_real_escape_string

+0

Sie müssen die Felder, in die Sie einfügen, nicht unbedingt in MySQL angeben, obwohl dies eine gute Idee ist. Auch wenn Sie Ihre Felder zitieren, sollte es mit Backticks nicht einfache Anführungszeichen sein –

0

Wie aknock sagt, Sie vermissen ein 'vor $ Tags

Allerdings müssen Sie wirklichzu verwendenzum Schutz gegen SQL injection Angriffe. Die Verwendung von mysql_escape_string für Ihre SQL-Abfrageparameter ist eine gute Angewohnheit.

Die Verwendung eines DB-Wrappers wie PEAR kann austretende Parameter viel weniger schmerzhaft machen. Ihr Code oben könnte wie geschrieben:

$insertQuery = "INSERT INTO blog_articles \ 
        (`title`, `tags`, `category`, `blog`, `author`, `date`) \ 
        VALUES (?, ?, ?, ?, ?, ?)"; 

$data = array($title, $tags, $category, $blog, $author, $date); 

if ($result = $connector->query($insertQuery, $data)) { 
    // It worked, give confirmation 
    echo '<center><b>Article added to the database</b></center><br>'; 
}else{ 
    // It hasn't worked so stop. Better error handling code would be good here! 
    die (mysql_error()); 
} 

(unter der Annahme, $connector ist ein PEAR DB-Objekt)

Explizit gibt die Namen und die Reihenfolge der Spalten, die Sie einfügen macht den Code viel besser verwaltbar und lesbar . Wenn Sie das Datenbankschema später ändern, sind Sie davor geschützt, Werte in die falsche Spalte oder in Spalten einzufügen, die nicht mehr vorhanden sind.