martin@rawgfxMedlem sedan okt. 20039 inlägg
Jag försöker bygga ett newsscript i PHP ODBC (låter inte så bra), och det funkar att selecta info ur databasen (ms access), men det funkar inte att sätta in data.
Koden i add.php ser ut såhär:
$conn=odbc_connect('rawgfx.net_db','','');
if (!$conn)
{
exit("Connection Failed: " . $conn);
}
$date = $_POST['date'];
$title = $_POST['title'];
$by = $_POST['by'];
$new = $_POST['new'];
$sql = "INSERT INTO News (date, title, by, new) VALUES ('$date, $title, $by, $new)";
odbc_exec($conn,$sql);
while (odbc_fetch_row) {
}
odbc_close($conn);
Jag får oftast felmeddelanden såsom: "Parse error: parse error, unexpected T_VARIABLE in h:\home\users\FA03-25-04-01_pr92pynfrvcndmhurfe9\rawgfx.net\public_html\add.php on line 14", alltså på raden där SQL koden ligger.
Vad kan det bero på?
QimenMedlem sedan juni 20013 568 inlägg
Re: Error, varför?
$conn=odbc_connect('rawgfx.net_db','','');
if (!$conn)
{
exit("Connection Failed: " . $conn);
}
$date = $_POST['date'];
$title = $_POST['title'];
$by = $_POST['by'];
$new = $_POST['new'];
$sql = "INSERT INTO News (date, title, by, new) VALUES ($date, $title, $by, $new)";
odbc_exec($conn,$sql);
while (odbc_fetch_row) {
}
odbc_close($conn);
Du hade råkat få med en ' efter VALUES (
/r Välkommen till wF! :bire
martin@rawgfxMedlem sedan okt. 20039 inlägg
Tack... Men när jag quotade alla variabler ($date,$title osv) fick jag detta mess:
Warning: SQL error: [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement., SQL state 37000 in SQLExecDirect in h:\home\users\FA03-25-04-01_pr92pynfrvcndmhurfe9\rawgfx.net\public_html\add.php on line 15
Fatal error: Maximum execution time of 30 seconds exceeded in h:\home\users\FA03-25-04-01_pr92pynfrvcndmhurfe9\rawgfx.net\public_html\add.php on line 16
Nåt skummt eller?
@ndersMedlem sedan juni 200026 914 inlägg
By är ett reserverat ord i SQL (exempevis ingår det i ORDER BY och GROUP BY). Byt namn på kolumnen.
Mvh
martin@rawgfxMedlem sedan okt. 20039 inlägg
SPiNMedlem sedan mars 20005 832 inlägg
Ja, din SQL-fråga borde se ut så här troligtvis:
INSERT INTO News ([date], [title], [by], [new]) VALUES (#$date#, '$title', '$by', $new)
Nu antar jag att fältet 'date' är av typen Datum, fälten 'title' och 'by' är av typen Text/PM och att fältet 'new' är av typen Tal.
Datum-fält ska omslutas av staket ( # ) och textfält ska omslutas av enkelfnuttar ( ' ). Ordet date är även ett reserverat ord i Access ( Som jag antar att du använder, eftersom att du ansluter via ODBC ) så det bör ha hakparenteser kring sig. Likaså med ordet by. Hur det är med new och title kan jag inte säga, men jag satte hakparenteser där också - det gör ju ingenting. :)
SPiNMedlem sedan mars 20005 832 inlägg
Jäkla @nders att va snabb, men han har inte lika goda ögon som vi ynglingar. Missar ju en massa. ;) :p
@ndersMedlem sedan juni 200026 914 inlägg
Nej, jag missar inget. Däremot finns det en himla massa jag inte förstår, exempelvis php. ;)
Mvh
SPiNMedlem sedan mars 20005 832 inlägg
För övrigt är hela din kod rätt sne för att koppla mot ODBC. Ta gärna en titt i den här tråden för att få det rätt: http://www.webforum.nu/showthread.php?s=&forumid=23&threadid=71053
Hm, i den använder jag iofs COM() för att ansluta mot ODBC, men det är likabra - ODBC-funktionerna är inte så stabila vad jag har förstått. :)
@nders> Jaja, vi säger väl det. ;)
SPiNMedlem sedan mars 20005 832 inlägg
martin@rawgfxMedlem sedan okt. 20039 inlägg
joo tack... Den "snea" koden funkar att selecta med... Jag skulle självklart ha använt MySQL, men jga har inte pengar till en db (kostar 400:- på mitt webhotell :/ )
Men tack för hjälpen!
Bytte ut by mot "author" istället...
SPiNMedlem sedan mars 20005 832 inlägg
Inget ont om Access ( Även fast det inte är att föredra i PHP's fall ), det var inte så jag menade. Med 'sne' kod syftade jag på att du har en loop som inte gör någonting, och efter att du har gjort en ren insert till databasen. Den kan du helt ta bort. Jag formulerade mig lite dåligt bara. :)
Funkar det nu?
martin@rawgfxMedlem sedan okt. 20039 inlägg
Förresten, vad menas med "maximum execution time 30 sec exceeded"?
martin@rawgfxMedlem sedan okt. 20039 inlägg
ok... Som sagt... Det e lite skummt... Det finns inga fel, men det kommer ej in i db:n....
Måste jag skriva någon extra kod för det?
SPiNMedlem sedan mars 20005 832 inlägg
'Maximum execution time 30 sec exceeded' betyder att ditt script tar över 30 sec att ladda, och PHP avbryter exekveringen av det. Det kan ha att göra med din loop.
Testa följande kod:
$conn=odbc_connect('rawgfx.net_db','','');
if (!$conn)
{
exit("Connection Failed: " . odbc_errormsg() );
}
$date = $_POST['date'];
$title = $_POST['title'];
$by = $_POST['by'];
$new = $_POST['new'];
$sql = "INSERT INTO News ([date], [title], [by], [new]) VALUES (#$date#, '$title', '$by', $new)";
odbc_exec($conn,$sql);
odbc_close($conn);
Som sagt, beroende på vad dina fält är för typer bör du ha olika literaler kring värdena som du skickar in i SQL-frågan.
martin@rawgfxMedlem sedan okt. 20039 inlägg
Tack!!! Det funka :D
You're my god...
Tack så mycket för hjälpen!
SPiNMedlem sedan mars 20005 832 inlägg
NP. :)
Markera gärna tråden som löst också, genom att klicka på länken "Acceptera som slutgiltigt svar" nere i ett inlägg. Det underlättar för andra användare som vill söka på bara lösta trådar. :)