Avatar billede jackass- Nybegynder
16. juni 2006 - 00:20 Der er 8 kommentarer og
1 løsning

Problemer med PHP og MSSQL

Hej

Jeg har lidt problemer med en INSERT statement i MS SQL.. nogen der kan fortælle mig fejlen?

        $do = "INSERT INTO user_table([id], [user], [fullname], [email], [accesslevel], [dateAdded], [modifiedDate], [addedByUser], [password]) values ('', '".$_POST['txtUser']."', '".$_POST['txtName']."', '".$_POST['txtEmail']."', '".$_POST['selectAccess']."', '".Date("Y-m-d")."', '".Date("Y-m-d")."', '".$_SESSION['UserName']."', '".sha1("123456")."')";
        if (mssql_query($do)) {
            echo "<center><font color=\"green\">The user \"".$_POST['txtUser']."\" was created successfully.</font></center>";
            exit;
        }
        else {
            echo "<center><font color=\"red\">It was not possible to create the user \"".$_POST['txtUser']."\" at this time due to an error. Please contact xxx@xxx.dk</font></center>";
            exit;
        }

..og den trigger selvf. den nederste error..

/jack
Avatar billede nielle Nybegynder
16. juni 2006 - 06:36 #1
Hvis din id er stat til at være en identity, så skal den ikke med i din SQL:

$do = "INSERT INTO user_table([id], [user], [fullname], [email], [accesslevel], [dateAdded], [modifiedDate], [addedByUser], [password]) values ('', '".$_POST['txtUser']."', '".$_POST['txtName']."', '".$_POST['txtEmail']."', '".$_POST['selectAccess']."', '".Date("Y-m-d")."', '".Date("Y-m-d")."', '".$_SESSION['UserName']."', '".sha1("123456")."')";

ændres til:

do = "INSERT INTO user_table([user], [fullname], [email], [accesslevel], [dateAdded], [modifiedDate], [addedByUser], [password]) values ('".$_POST['txtUser']."', '".$_POST['txtName']."', '".$_POST['txtEmail']."', '".$_POST['selectAccess']."', '".Date("Y-m-d")."', '".Date("Y-m-d")."', '".$_SESSION['UserName']."', '".sha1("123456")."')";
Avatar billede jackass- Nybegynder
16. juni 2006 - 12:23 #2
Dette giver også fejl? :-/

$do = "INSERT INTO user_table([user], [fullname], [email], [accesslevel], [dateAdded], [modifiedDate], [addedByUser], [password]) values ('".$_POST['txtUser']."', '".$_POST['txtName']."', '".$_POST['txtEmail']."', '".$_POST['selectAccess']."', '".Date("Y-m-d")."', '".Date("Y-m-d")."', '".$_SESSION['UserName']."', '".sha1("123456")."')";
Avatar billede nielle Nybegynder
16. juni 2006 - 12:46 #3
Prøv - som debug - at udskrice SQL-sætningen før at d forsøger at servere den for MS SQL. I 9 ud af 10 tilfælde skyldes underlig database-adfærd at SQL-kommandoeren i virkeligheden indeholdte noget andt end det man troede:

$do = "INSERT INTO user_table([user], [fullname], [email], [accesslevel], [dateAdded], [modifiedDate], [addedByUser], [password]) values ('".$_POST['txtUser']."', '".$_POST['txtName']."', '".$_POST['txtEmail']."', '".$_POST['selectAccess']."', '".Date("Y-m-d")."', '".Date("Y-m-d")."', '".$_SESSION['UserName']."', '".sha1("123456")."')";

echo "DEBUG: " . $do . "<br>";

if (mssql_query($do)) {
...
Avatar billede jackass- Nybegynder
16. juni 2006 - 13:06 #4
Det har jeg også prøvet.. giver følgende output:

DEBUG: INSERT INTO user_table([user], [fullname], [email], [accesslevel], [dateAdded], [modifiedDate], [addedByUser], [password]) values ('nip', 'Niels Pallesen', 'nip@xxx.dk', '3', '2006-06-16', '2006-06-16', 'jck', '7c4a8d09ca3762af61e59520943dc26494f8941b')
Avatar billede nielle Nybegynder
16. juni 2006 - 13:53 #5
Er dt access-level felt et talfet eller et tekstfelt - ved talfelter skal der ikke '-tegn rundt om værdien.

Ved datofelter skal du have #-rundt om datoen i stedet for '-tegn.
Avatar billede jackass- Nybegynder
16. juni 2006 - 16:45 #6
Fy for sa... en fejl 40 .. feltet "dateAdded" hedder "addedDate" ... mig dum, sorry :-/

Smid bare svar, så får du point alligevel for indsatsen :)
Avatar billede nielle Nybegynder
16. juni 2006 - 18:05 #7
Av ... kender dt kun alt for godt :^|

Hvis du havde programmert imod en MySQL database, ville dy have haft muligheden for at udskrive mysql_error() og denne ville have afslåret fejlen med det samme. Umiddelbart ser der ikke ud til at være en tilsvarende funktion for MS SQL. Faktisk lidt underligt...

Det ser dog ud til at der måske er en lignende funktiona alligevel:

mssql_get_last_message()

(Ref: http://dk.php.net/manual/da/function.mssql-get-last-message.php)

Næste gang at du får en irriterende fejl, kan du prøve noget i stil med:

$result = mssql_query($do) or die(mssql_get_last_message());
Avatar billede nielle Nybegynder
22. juni 2006 - 21:28 #8
Så mangler du bare at acceptere svaret :^)
Avatar billede jackass- Nybegynder
24. juni 2006 - 15:30 #9
Hehe jeps.. tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Politiets Efterretningstjeneste

Teknisk IT-sikkerhedsspecialist i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen

Rambøll Management Consulting

Senior Software Engineer