Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

21

26.05.2013, 15:49

Das das jetzt funktioniert halte ich für Zufall.

Effektiv führst du sowas aus:

Quellcode

1
INSERT INTO `Nachrichten`(`Absender`) VALUES ('.5.')

(Also angenommen AbsenderID wäre 5)

Du solltest dir auf jeden Fall nochmal die Sache mit den einfachen und doppelten Anführungsstrichen angucken.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

22

26.05.2013, 19:51

Das das jetzt funktioniert halte ich für Zufall.

Effektiv führst du sowas aus:

Quellcode

1
INSERT INTO `Nachrichten`(`Absender`) VALUES ('.5.')

(Also angenommen AbsenderID wäre 5)

Du solltest dir auf jeden Fall nochmal die Sache mit den einfachen und doppelten Anführungsstrichen angucken.


http://www.php.de/php-tipps-2004-2/12218…ngszeichen.html

Es wäre also das einfachste, wenn ich einfach immer " statt ' verwenden würde, da in ' keine Variablen eingesetzt werden, oder? Warum funktioniert es dann bei mir trotzdem, oder meintest du das mit dem Zufall?

Aber was ich nicht verstehe, in diesem Tutorial wird es doch genau so gemacht:
http://www.php-einfach.de/einf_mysql_daten_speichern.php
Und das ist eigl. kein x-beliebiges von einem Anfänger erstelltes Tutorial, sondern recht bekannt.

Oder hat sich da mit einer neueren Php-Version schon wieder was geändert?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

23

26.05.2013, 19:58

Du solltest wenn möglich immer ' anstelle von " verwenden, gerade weil in " nach Variablen gesucht wird und das meistens überflüssig und schlechter Stil ist.
Gängige Praxis ist so etwas:

Quellcode

1
$var = 'Uta ist ' . $age . ' Jahre alt';


Die ' in dem Beispiel sind als einfache Anführungszeichen für den Query gedacht, nicht für den PHP Code.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

24

26.05.2013, 20:02

Du solltest wenn möglich immer ' anstelle von " verwenden, gerade weil in " nach Variablen gesucht wird und das meistens überflüssig und schlechter Stil ist.
Gängige Praxis ist so etwas:

Quellcode

1
$var = 'Uta ist ' . $age . ' Jahre alt';


Ach so, die Punkte sorgen für ein aneinanderhängen der Variablen. Das erklärt dann wohl auch warum es für die Ausführung von MySql Abfragen mit Php sehr wohl von Unterschied ist, ob die Zahlen als String oder als Integer vorliegen, da nicht alles ein großer String ist, sondern nur die verschiedenen Datentypen aneinander verkettet wurden, oder?
Dann waren meine " am Rand der Abfrage wohl die Fehlerursache.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

25

26.05.2013, 20:18


Ach so, die Punkte sorgen für ein aneinanderhängen der Variablen.

Exakt. Da fehlen aber deutliche Grundlagen. :P
Das erklärt dann wohl auch warum es für die Ausführung von MySql Abfragen mit Php sehr wohl von Unterschied ist, ob die Zahlen als String oder als Integer vorliegen, da nicht alles ein großer String ist, sondern nur die verschiedenen Datentypen aneinander verkettet wurden, oder?
Dann waren meine " am Rand der Abfrage wohl die Fehlerursache.

Meinte ich ja schon. Probier mal ein wenig rum.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

26

01.06.2013, 13:12

Jetzt muss ich den Thread doch noch einmal ausgraben.

Ich habe nun folgende SQL-Anweisung:

Quellcode

1
$abfrage = 'INSERT INTO Tabellenname (Spalte1, Spalte2) VALUES ('.$Variable1.', '.$Variable2.')';

Diese klappt auch, nur nicht wenn ein String einen Punkt enthält. Dann wird keine Zeile eingefügt und mysql_error liefert:

Zitat

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.2013, test)' at line 1


Wie kann man solche Probleme umgehen? Muss ich wirklich erst alle Punkte durch ein x-beliebiges Sonderzechen wie ° ersetzen, und dann nach dem Laden aus der Datenbank wieder das alle ° in . zur Ausgabe ersetzen? Das würde aber doch viel Rechenleistung verschwenden, oder?

Danke schon mal für eure Hilfe.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

27

01.06.2013, 13:20

Ich empfehle noch einmal PDO und Prepared Statements.
Es kostet dich keine Stunde Einarbeitung und löst alle deine Probleme. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

28

01.06.2013, 13:23

Ich empfehle noch einmal PDO und Prepared Statements.
Es kostet dich keine Stunde Einarbeitung und löst alle deine Probleme. :)


Danke, aber mein Server hat Php Version 4...

Bzw. Php Version 5.3.1, wird aber nicht bei .php ausgeführt, sondern nur bei .php5
Dann müsste ich alle Dateiendungen und Links ändern.

Gäb es denn nicht eine Lösung ohne Prepared Statements?


Was auch komisch ist, wenn ich die Abfrage so formuliere:

Quellcode

1
$abfrage = "INSERT INTO Tabellenname (Spalte1, Spalte2) VALUES ('$Variable1', '$Variable2')";

Wird eine korrekte Zeile in die Datenbank und eine leere eingefügt, auch komisch. Lösungsidee: Letzte Zeile jeweils löschen, aber das wäre wohl etwas umständlich und könnte weitere Fehler auslösen...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MitgliedXYZ« (01.06.2013, 13:29)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

29

01.06.2013, 13:39

Ich bekomme keinen solchen Fehler, wenn ich etwas wie $datum = '12.02.2012'; habe.
Zeig mal etwas mehr Code. Ansonsten versuche entweder Punkte mit einem Backslash zu escapen:
str_replace('.', '\.', $var);
oder direkt zu ersetzen, bspw. mit '-':
str_replace('.', '-', $var);

Wen du's noch nicht probiert hast, wäre auch das hier einen Blick wert.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

30

01.06.2013, 18:33

Ok, am Datum lag es bei mir auch nicht, hab die Fehlermeldung nur falsch verstanden.

Ist irgendwie merkwürdig. Hab jetzt zumindest das Problem mit der zusätzlichen leeren Datensatzzeile gefunden, schuld war das neuladen der Seite. Das ist jetzt behoben. Trotzdem, so funktioniert es jetzt:

Quellcode

1
$abfrage = "INSERT INTO Tabellenname (Spalte1, Spalte2) VALUES ('$Variable1', '$Variable2')";

So müsste es jedoch auch gehen (was sogar besser wäre), tut es aber nicht:

Quellcode

1
$abfrage = 'INSERT INTO Tabellenname (Spalte1, Spalte2) VALUES ('.$Variable1.', '.$Variable2.')';

Werbeanzeige