kostenloser Webspace werbefrei: lima-city


db tabelle varchar

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    beachteam

    beachteam hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. was funktioniert nicht? kommen keine daten in der tabelle an? bricht das script ab?
    ohne fehlermeldung wird es schwer, hier etwas zu erraten.

    mfg
  4. Autor dieses Themas

    beachteam

    beachteam hat kostenlosen Webspace.

    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...
  5. t*****b

    Du solltest deine Spalten nicht "String" und "Int" nennen, da das reservierte Wörter sind ;)
  6. Autor dieses Themas

    beachteam

    beachteam hat kostenlosen Webspace.

    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
  7. 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.
  8. Jo, "order" ist nicht viel besser, als "int". Das ist nämlich auch reserviert: klick :wink:.
  9. Autor dieses Themas

    beachteam

    beachteam hat kostenlosen Webspace.

    Hm ja, das "order" wirds wohl gewesen sein...
    Und an sowas hält man sich wieder stundenlang auf... danke!
  10. 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.
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!