|
|
 |

|

 |

| Community » Rund um das Thema Datenbank |
|
Problem beim UPDATE von MySQL-Inhalten
|
Seitenanfang |
Hi erstmal... Falls es sowas schon gibt sag ich gleich mal sorry, hab aber nichts gefunden.Ich habe erst seit rund einer Woche mit Perl und MySQL zu tun und dementsprechend klein ist mein bisheriges Wissen. Deshalb stehe ich jetzt vor einem Problem. Ich will mit einem Perl-Skript Informationen in einer Tabelle aktualisieren, als den alten Inhalt mit dem neuen Überschreiben. Dazu würde ich (soweit ich bisher mitbekommen habe) den Befehl UPDATE verwenden. Ursprünglich hatte ich das so gedacht: $main::drh->do("UPDATE products_description products_url=\"$url\", products_short_description=\"$dscr\", products_nr=\"art_nr\" WHERE products_id=\"$art_id\"");Damit funktionier es allerdings nur, wenn in $dscr (ist ein längerer Text auch mit Sonderzeichen) nichts mit einem " steht, da er sonst das ganze irgendwie falsch interpretiert. Darum hab ich dann sowas versuch, wie ichs auch schon bei INSERT INTO gemacht hab, weils dort auch funktioniert hat: $sql=$main::drh->prepare("UPDATE products_description (products_url, products_short_description, products_nr) Values (?, ?, ?) WHERE products_id=\"$art_id\""); $sql->execute($url, $dscr, $art_nr);Leider funktioniert das bei UPDATE scheinbar nicht so ganz. Drum hab ich jetzut die Frage, wie ich dieses Problem sonst lösen kann. Als Anfänger tu ich mir irgendwie schwer im Internet nach dem richtigen zu suchen, eil ich jaauch keine Ahnung hab auf was ich dann so achten soll, darum frag ich hier. Wäre sehr dankbar, wenn mir da jemand helfen kann. Ich hoffe ich hab nichts wichtiges vergessen, was erwähnt werden sollte... Bis dahin mfg Moranyo
Datum: 19.07.2005-16:31

|
re: Problem beim UPDATE von MySQL-Inhalten
|
Seitenanfang |
| Die Doku die Du suchst (oder generell fuer alle Module) findest Du (auf englisch) auf dem CPAN-Server: http://search.cpan.org/~timb/DBI-1.48/DBI.pm Du hast mehrere Moeglichkeiten das Problem mit den Anfuehrungszeichen zu beseitigen: Du benutzt die Funktion quote() bevor Du ein do() oder prepare() aufrufst und baust damit dein SQL-Query zusammen: $sql = sprintf "SELECT foo FROM bar WHERE thingy = %s", $dbh->quote("Don't");
oder Du ersparst Dir das indem Du nur die prepare/execute Variante mit Platzhaltern (?) benutzt, so wie Du es schon mit den Werten machst die Du in die Tabelle eintragen willst - Aber eben auch mit dem Filterwert im WHERE: $sql=$main::drh->prepare("UPDATE products_description (products_url, products_short_description, products_nr) Values (?, ?, ?) WHERE products_id = ?"); $sql->execute($url, $dscr, $art_nr, $art_id);
Aber Du solltest nicht beide Varianten mischen.
Datum: 20.07.2005-08:09

|
re: Problem beim UPDATE von MySQL-Inhalten
|
Seitenanfang |
| Herzlichen Dank für die Antwort! Leider funktionieert es immer noch nicht so ganz - was wohl eher an mir liegt. Wenn ich es mit der ersten Variante mache, erhalte ich zwar in $sql einen schönen, richtig aussehenden Befehl, aber ich weiß nicht genau, wie ich ihn dann ausführe. Ich habs so (siehe unten) probiert in den verschiedensten Varianten (mit", ', \", etc.), weil ich mir gedacht habe, er schreibt dann den ganzen SQL-Befehl so hinein und führt ihn aus.
main::drh->do($sql) Hierbei kommt allerdings kein Fehler, sondern die Daten werden einfach nicht in die DB geschriben.Und bei der zweiten variante ändert sich gar nichts. Es heißt dann immer noch "DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax". Ich werd mich mal auf der Seite die du genannt hast umsehen, vielleicht find ich ja da was raus, wenn ich mich als Anfänger zurchtfinde ^^ Aber nochmal Danke für dein Bemühen.
Datum: 20.07.2005-09:55

|
re: Problem beim UPDATE von MySQL-Inhalten
|
Seitenanfang |
| argh... Ich bin ein Depp. Habe das Problem bei mitlerweile gefunden. Es funktionieren (jetzt auch endlich bei mir) beide varianten. Hab lediglich vorher aus versehen die Tabelle geleert, die ich aktualisieren wollte. Darum hat er nichts gemacht. Was mir allerdings aufgefallen ist, bei der zweiten Variante wo die Variablen durch die Platzhalter ? erstezt werden: Wenn ich es so schreibe, wie du es mir gesagt hast bringt er ja den besagten Fehler. Wenn ich jedoch alle Werte einzeln mit = ? einfüge geht auch das wieder. $sql=$main::drh->prepare("UPDATE products_description products_url = ?, products_short_description = ?, products_nr = ? WHERE products_id = ?"); $sql->execute($url, $dscr, $art_nr, $art_id);Nochmal Danke für deine Hinweise, vor allem der Link hat mir jetzt doch noch geholfen!
Datum: 20.07.2005-11:44

|
|

|

|

|
 |

|

|
|