db tabelle varchar
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
datenbank
datensatz
datum
erfolg
fehler
funktion
http
ordern
problem
reserviert url
run
spalten
string
struktur
tabelle
test
url
vereinfachung
wald
-
Hey Leute!
Ich raffe gerade gar nichts mehr. Ich habe eine Einfache Tabelle in einer Datenbank, welche einen VARCHAR bekommen soll und möchte nun einen String dort drin speichern. Ich habe das schon an 1000 anderen Stellen gemacht und es klappt wunderbar, aber hier nicht mehr und ich suche nun schon knapp 1 Stunde nach dem Fehler und kann ihn einfach nicht finden. Könnt ihr mir bitte den Wald zeigen, denn mir versperren die ganzen Bäume die Sicht...
Ohne den String, nur mit dem int, funktioniertes ohne Probleme...
Ich benutze PDO.
DB Abfrage:
function foo() { $string = "test"; $int = 1337; $query = "INSERT INTO test (string, int) VALUES (:string, :int)"; $stmt = $this->db->prepare($query); $stmt->bindParam(':string',$string); $stmt->bindParam(':int',$int); return $stmt->execute(); }
DB Struktur:
http://img577.imageshack.us/img577/6403/26685226.png
Beitrag zuletzt geändert: 1.12.2010 18:01:10 von beachteam -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
was funktioniert nicht? kommen keine daten in der tabelle an? bricht das script ab?
ohne fehlermeldung wird es schwer, hier etwas zu erraten.
mfg -
Ich lass mir direkt das Ergebnis von $stmt->execute(); ausgeben. Wenn ich nur den integer inserte bekomme ich 1, also TRUE und ich erhalte einen neuen Datensatz in der Tabelle.
Mache ich das ganze nur mit dem STRING oder mit STRING und INTEGER, dann erhalte ich null, also FALSE und KEINEN neuen Datensatz in der Tabelle.
Er hat also irgendwelche Probleme mit dem inserten des Strings in das VARCHAR Feld, was ich absolut nicht nachvollziehen kann, weil ich es so eigentlich schon immer gemacht habe...
SQL Fehlernachrichten erhalte ich keine... -
Diese Namen habe ich nur zur verdeutlichung des Problems genommen. Es funktioniert auch mit anderen Namen nicht und hat hier keinen Einfluss, da es einmal als Variable mit "$" und einmal mit ":" deklariert ist und somit von den reservierten Wörtern abweicht...
Machen wir das ganze ohne Vereinfachung, direkt am eigentlichen Problem:
Etwas vereinfachte Datenbankabfrage:
EDIT: Genaue Analyse:
function foo() { $myTestString = "test"; $myTestInt = 1337; echo "String: ".$myTestString."<br/>"; echo "Integer: ".$myTestInt."<br/>"; $query = "INSERT INTO runs (userID, order) VALUES (:userID, :order)"; echo "Query: ".$query."<br/>"; $stmt = $this->db->prepare($query); $stmt->bindParam(':order',$myTestString); $stmt->bindParam(':userID',$myTestInt); echo "Erfolg: ".$stmt->execute()."<br/><br/>"; $query = "INSERT INTO runs (userID) VALUES (:userID)"; echo "Query: ".$query."<br/>"; $stmt = $this->db->prepare($query); $stmt->bindParam(':userID',$myTestInt); echo "Erfolg: ".$stmt->execute(); }
Erzeugt folgende Ausgabe:
String: test Integer: 1337 Query: INSERT INTO runs (userID, order) VALUES (:userID, :order) Erfolg: Query: INSERT INTO runs (userID) VALUES (:userID) Erfolg: 1
Mit folgender Datenbankstruktur: http://img691.imageshack.us/img691/4118/db1z.png
Beitrag zuletzt geändert: 1.12.2010 18:48:25 von beachteam -
Was für eine Framework benutzt du den um auf die Datenbank zuzugreifen? Gibt es da eine Funktion um den letzten Fehler abzufragen??
Es gibt die eingebaute php-Funktion "mysql_error()", aber kann sein, dass die in deinem Fall nicht unbedingt funktioniert. -
Jo, "order" ist nicht viel besser, als "int". Das ist nämlich auch reserviert: klick .
-
Hm ja, das "order" wirds wohl gewesen sein...
Und an sowas hält man sich wieder stundenlang auf... danke! -
Typischer MySQL Fehler... ich frage mich, warum MySQL ihren Parser nicht dahingend fixed. Es sollte nun wirklich kein Problem sein reservierte Bezeichner außerhalb ihres Kontexts zu nutzen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage