PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .



Merovinger
10.11.2007, 18:49
.

mitaki
10.11.2007, 20:05
Auf die schnelle erkenne ich da keinen Fehler, aber gibt dir doch mal $sql aus und versuche mit einem Abfrageprogramm (phpMyAdmin oder den QueryBrowser, falls es den noch gibt [MySQL-Software]) den Fehler zu finden.
Mit Syntax-Highlighting sollte das einfacher sein als mit einer formatierten PHP-Codeausgabe.

Eventuell enthält $link ein unescaptes '?

Jesus_666
13.11.2007, 09:42
INSERT ... SET? Das ist nicht sehr häufig zu sehen und ich würde von dem Konstrukt abraten, weil es von MySQL eher schlecht dokumentiert wurde. (Nebenbei habe ich es auch nicht zum Laufen gebracht, wenn mehr als ein Parameter übergeben wurde.) Die meisten Leute verwenden INSERT ... VALUES:

INSERT INTO `Datenbank`.`Tabelle` (`spalte1`, `spalte2`, `spalte3`, `spalte4`)
VALUES ('Wert1', 'Wert2', 'Wert3', 'Wert4');

-- Wenn du sämtliche Spalten der neuen Tabellenzeile füllen willst, kannst du
-- die erste Klammer auch weglassen
INSERT INTO `Datenbank`.`Tabelle`
VALUES ('Wert1', 'Wert2', 'Wert3', 'Wert4');


Nebenbei, PHP ersetzt Variablen in Strings mit doppeltem Anführungszeichen. Statt...
$bla = "Bla bla ".$foo." bla";...kanst du auch folgendes schreiben:
$bla = "Bla bla $foo bla";

Wenn dein Variablenname direkt von weiteren Buchstaben oder Zahlen gefolgt wird (oder ein Array-Index ist), solltest du geschweifte Klammern verwenden:
$bla = "Bla ${foo}bla";
$blubb = "Blubb ${knurd[6]}";

Diese Ersetzung funktioniert nicht mit Funktionen und dergleichen. In Strings mit einfachen Anführungszeichen findet keine Ersetzung statt.

Jesus_666
17.11.2007, 16:09
hab meinen fehler gefunden...
fehler war $link
ich hatte an $link noch ein ' rangehängt -.-
Du übergibst unsanitisierte Variablen an SQL? Happy injection time!

Jesus_666
17.11.2007, 22:13
Ich spreche von Maßnahmen wie mysql_escape_string (http://de2.php.net/manual/de/function.mysql-escape-string.php). Damit dir nicht das (http://xkcd.com/327/) passiert.

mitaki
17.11.2007, 22:42
Ich spreche von Maßnahmen wie mysql_escape_string (http://de2.php.net/manual/de/function.mysql-escape-string.php). Damit dir nicht das (http://xkcd.com/327/) passiert.

Ich rate lieber zu mysql_real_escape_string (http://de2.php.net/manual/de/function.mysql-real-escape-string.php), da hier auch die aktuelle Zeichenkodierung berücksichtigt wird. Das ist vor allem dann nett, wenn man mit PHP 5.2.3+ arbeiten kann, da dann auch mysql_set_charset (http://de2.php.net/manual/de/function.mysql-set-charset.php) zur Verfügung steht.

Jesus_666
18.11.2007, 12:02
Wenn wir von idealen Funktionen sprechen würde ich eh zu mysqli->real_escape_string (http://de.php.net/manual/de/function.mysqli-real-escape-string.php) raten. Die mysqli-Erweiterung ist der alten mysql-Erweiterung voraus; man muß nur sicherstellen, daß der Hoster sie auch unterstützt.

Mit mysqli kriegst du auch lustige Funktionen wie mysqli->prepare (http://de.php.net/manual/de/function.mysqli-prepare.php)/mysqli->stmt_bind_param (http://de.php.net/manual/de/function.mysqli-stmt-bind-param.php), mit denen du Typsicherheit in deine Abfrage kriegst. Und Unterstützung für Transaktionen und Rollbacks. Und allgemein Unterstützung für MySQL-Features, die neuer sind als Oktober 2004.