2009-05-03 2 views
1

Ich versuche, Zeitfelder mit einem PHP-Skript einfügen, aber ich bekomme einen Syntaxfehler. Kann mir bitte jemand sagen, wo ich den Fehler mache. Dank fellowsPHP MySQL Syntax zum Einfügen von Datum, Uhrzeit

INSERT INTO Kalender (Ereignis, von, bis, Tag) VALUES (' "$ _ REQUEST [ 'Ereignis']."', ‚ " $ _ REQUEST [ 'FROM_TIME']." ' ' "$ _ REQUEST [ 'to_time']." ' ' "$ _ REQUEST [ 'date_event']." ')

Antwort

2

nie String-Daten in der sQL-Anweisung ein, ohne die Daten zu desinfizierende oder Sie am Ende mit sql-Injektionen (absichtliche oder unbeabsichtigte Injektionen), siehe http://php.net/mysql_real_escape_string Wenn Sie keinen Debugger installiert haben, lassen Sie PHP die SQL-Anweisung drucken, so dass Sie es überprüfen können.

Formatieren und einrücken Sie Ihre SQL-Abfragen. Sie sind viel einfacher zu lesen und zu debuggen.

Überprüfen Sie immer den Rückgabewert von mysql_query(). Wenn es FALSE ist, ist die Abfrage fehlgeschlagen und mysql_errno() oder mysql_error() kann Ihnen mehr über die Ursache des Fehlers erzählen.

Wenn Sie eine Kennung verwenden möchten, die auch eine reserved word for MySQL ist, müssen Sie fast immer in Backticks (`) oder double_quotes (in Ansi-Modus) setzen.

Das Format von Datum/Uhrzeit-Literale von MySQL verstanden wird bei http://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html erklärt

Mit _REQUEST für INSERT-Operationen sein kann fragwürdig ... aber ich lasse, dass

<?php 
$mysql = mysql_connect...

$query = " INSERT INTO `calendar` (`event`, `from`, `to`, `day`) VALUES ( '" . mysql_real_escape_string($_REQUEST['event'], $mysql) ."', '" . mysql_real_escape_string($_REQUEST['from_time'], $mysql) ."', '" . mysql_real_escape_string($_REQUEST['to_time'], $mysql) ."', '" . mysql_real_escape_string($_REQUEST['date_event'], $mysql]) ."' ) "; echo '<pre>$query=', htmlspecialchars($query), '</pre>'; $result = mysql_query($query, $mysql); if (!$result) { echo 'error: ', mysql_error($mysql); }

;-) anderen zu beantworten und BTW: Verwenden Sie stattdessen prepared statements.

6

Um in mySQL-Datetime-Felder einzufügen, muss die Zeichenfolge in einem bestimmten Format vorliegen, damit mySQL sie verstehen kann. Das Problem ist, dass PHP seine eigenen Gedanken und Ideen hat, wie Daten dargestellt werden. Wenn Sie mit Daten zwischen den beiden arbeiten, müssen Sie übersetzen.

Wenn in PHP Sie mit einem Zeitobjekt handelt, dies zu tun ein String mySQL bekommen mag:

$mysqlDateString = date('Y-m-d H:i:s', $phpdate); 

oder wenn Sie mit einem String-Datum zu tun können Sie dies tun:

$mysqlDateString = date('Y-m-d H:i:s', $strtotime("08/09/2009")); 

Wenn Sie eine Datetime-Zeichenfolge von mySQL bekommen können Sie dies mit es in PHP zu beschäftigen tun:

$phpTime = strtotime($mysqlDateString); 

Ich bin gerade auf dieses Problem gestoßen, hoffentlich wird das auch für dich funktionieren.

+0

@Mike: Hallo Mike. habe gerade einen kleinen Tippfehler in Ihrem Code-Snippet gefunden: $ mysqlDateString = Datum ('Y-m-d H: i: s', $ strtotime ("08/09/2009")); Der $ sollte von $ strtotime entfernt werden ("08/09/2009"). :) –