2009-07-16 12 views
0

Die folgende Anweisung wird in dem MS SQL Server Management Studio ordnungsgemäß ausgeführt. Wenn ich jedoch versuche, über PHP auszuführen, tritt die Einfügung nicht auf und es werden keine Fehler zurückgegeben. Ich weiß, dass meine Verbindung gültig ist, alle meine Auswahlanweisungen werden ordnungsgemäß zurückgegeben. Was vermisse ich?PHP SQL Server Insert-Problem

DECLARE @id bigint; SET @id = (SELECT MAX(application_track_id) + 1 FROM application_track_data); INSERT INTO application_track_data (application_track_id,user_id, action_key, action, ip_address, session_id, application) VALUES (@id,1,'584','login','192.168.37.60','05sn3618p61dvmml6pkefuteg2','akamata'); 

Hier ist der Code, den ich verwende, um die SQL auszuführen.

$result = mssql_query($sql); 
if(!$result) 
{ 
print "Error:" . mssql_get_last_message(); 
} 
else 
print "Success"; 

Antwort

1

Sie könnten dies in eine Prozedur einfügen. Da Sie mehrere Befehle in Ihrer SQL-Anweisung haben, glaube ich, dass die meisten DB-Treiber nur eine einzelne Anweisung (oder eine einzelne T-SQL-Anweisung) aufrufen können. Wenn Sie also mehrere Dinge müssen sie in eine gespeicherte Prozedur passieren drehen oder jede einzelne Anweisung ausführen, basierend auf Rückgabewert usw.

UPDATE: Versuchen Sie folgendes: http://us3.php.net/manual/en/function.mssql-next-result.php

Ich denke, es mehrere Abfragen erlaubt, aber Sie müssen hol dir den richtigen. Es gibt auch einige db-Bibliotheken, die eine * _query_multiple-Funktion haben, aber nur in den mysqli-Bibliotheken oder den maxdb-Bibliotheken.

+0

Ok, ich habe es in einer gespeicherten Prozedur. Jetzt bekomme ich den folgenden Fehler: Fehler beim Konvertieren des Datentyps varchar in numerisch. Der SP läuft gut aus dem Management Studio. Die einzige Sache, die ich mit der Tabellenstruktur sehe, ist, dass eine der Spalten ein bigint ist. Wird das ein Problem verursachen? – James

0

Meine Vermutung wäre, dass Sie mit Autocommit aus laufen und die Transaktion nicht begehen.

0

Diese Art von Aktivität sollte wirklich in einer gespeicherten Prozedur sein. Leichter zu verwalten und einfacher von php aus anzurufen. Sie müssen diese Änderungen auch jedes Mal bestätigen.

0

Versuchen Sie die INSERT-Anweisung allein. Wenn das funktioniert, wissen Sie, dass mehrere Anweisungen einen Fehler verursachen (und Sie müssen Ihre Abfragen durch eine gespeicherte Prozedur ersetzen). Wenn es scheitert, dann ist es richtig, es ist ein Problem mit Autocommit.

Persönlich würde ich meine Wette mit den mehrfachen Aussagen setzen, aber das sollte Ihnen einen Weg geben, um die Grundursache zu bestimmen (es ist möglich, dass beide ein Problem sind).

+0

Wenn ich die Insert-Anweisung selbst ausführen. Ich bekomme "Fehler beim Konvertieren des Datentyps varchar in numerisch". Wenn ich die Insert-Anweisung auf das einzige erforderliche Feld reduziere, erhalte ich immer noch den Fehler. Wird ein Bigint-Datentyp ein Problem verursachen? – James