Datenbank Update

Probier das mal
PHP:
$query = "UPDATE $tbl SET Vorname='".$_GET["Vorname"]."' WHERE Userid='".$_GET["Userid"]."'";
mysql_query($query) or die ("Fehler in Abfrage ".$query.":<br/>".mysql_errno()." - ".mysql_error());

Strings müssen in 'nem Query doch generell in Anführungszeichen geschrieben werden, oder lieg ich falsch?
Code:
UPDATE $tbl SET Vorname=Klaus // Wird nicht funktionieren
UPDATE $tbl SET Vorname='Klaus' // das schon
 
Zuletzt bearbeitet:
@puschelchen
Du hast mein Tutorial. Das beinhaltet genau das was saftmeister hier für dich geschrieben hat.

Hast du beides nicht gelesen?

Mein Tutorial beinhaltet sogar ein Beispiel das genau das Problem hat, das du auch hast.
Nun gut, ich will mal nich so sein. Hier mal für dich, wie man sowas angehen sollte
------------------------------
Wir haben einen einfachen Code, der ein Update auf die Datenbank macht. Nun updated dieser Code aber nichts in der Datenbank und wir finden noch nicht heraus warum. In der folgenden Anleitung werden wir anhand dieses Beispiels sehen wie man eine einfache Fehleranalyse durchführen kann um solche Probleme zu lösen.
PHP:
<?php
mysql_connect('localhost', 'root', '') or die  ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db('testdb') or die  ("Keine Verbindung möglich: ".mysql_error());

$value = 'test';
$where = 15;
$sql  = "UPDATE myTable SET feld1 = {$value}  WHERE id = {$where};";
mysql_query($sql);
echo mysql_affected_rows();
?>

[SIZE=+2]Lösung[/SIZE]

[SIZE=+1]1) Report Error All[/SIZE]
Als erstes ergänzen wir unseren Code mal um die folgende Zeile um uns alle Fehlermeldungen auszugeben.
error_reporting(E_ALL);

Anschliessend testen wir erneut und schauen ob eine Sinnvolle Fehlermeldung erscheint.
PHP:
<?php
error_reporting(E_ALL);
mysql_connect('localhost', 'root', '') or die  ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db('testdb') or die  ("Keine Verbindung möglich: ".mysql_error());
...
?>

Diese Zeile sollte wieder entfernt werden, bevor man in die produktive Umgebung geht. Mehr dazu findest du in der PHP-Doku -> http://php.net/manual/de/security.errors.php

[SIZE=+1]2) Query-String ausgeben[/SIZE]
Führte der erste Schritt noch nicht zu einem Resultat, so können wir noch den generierten Query-String testen.
Dazu geben wir diesen mittels echo() aus (Nicht das Result von mysql_query, sondern den zusammengesetzten Query-String). Zudem versuchen wir noch die Fehlermeldung herauszukriegen. Wir erweitern also das mysql_query() um die Errorausgabe mysql_error() .

PHP:
<?php
error_reporting(E_ALL);
mysql_connect('localhost', 'root', '') or die  ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db('testdb') or die  ("Keine Verbindung möglich: ".mysql_error());

$value = 'test';
$where = 15;
$sql  = "UPDATE myTable SET feld1 = {$value}  WHERE id = {$where};";
echo "{$sql}<br />\n";
mysql_query($sql) or die(mysql_error());
//echo mysql_affected_rows();
?>


In der Ausgabe erscheint dann etwa das Folgende: Unser SQL und eine Fehlermeldung

Code:
UPDATE myTable SET feld1 = test  WHERE id = 15;
Unknown column 'test' in 'field list'


So haben wir eine Fehlermeldung die etwas aussagt und das SQL, wie es an die Datenbank abgesetzt wird.
Mit diesen Informationen können andere Programmierer in Foren etc. besser helfen als 'nur' mit der Meldung 'Es geht nicht'.

Geübte SQL-Leser sehen hier sofort den Fehler. test ist natürlich kein Feld sondern ein String und sollte in '...' gesetzt werden.

[SIZE=+1]3) Testen mit phpMyAdmin[/SIZE]
Um das Sql zu verfeinern und zu testen kann man dieses nun aus der Ausgabe kopieren und mit phpMyAdmin oder einem anderen Tool für MySQL testen und anpassen bis es funktioniert. Das funktionierende SQL anschließend wieder zurück in den PHP-Code implentieren

Unser korrigiertes und getestete SQL sieht dann so aus
SQL:
UPDATE myTable SET feld1 = 'test'  WHERE id = 15;


[SIZE=+1]4) Korrektur einpflegen[/SIZE]
Zum Schluss müssen wir nur noch das error_reporting() sowie unser echo() wieder entfernen und unseren korrigiertes SQL in den Code einpflegen. Und so sieht dann der funktionierende Code aus
PHP:
<?php
mysql_connect('localhost', 'root', '') or die  ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db('testdb') or die  ("Keine Verbindung möglich: ".mysql_error());

$value = 'test';
$where = 15;
$sql  = "UPDATE myTable SET feld1 = '{$value}'  WHERE id = {$where};";
mysql_query($sql) or die(mysql_error());
echo mysql_affected_rows();
?>
 
Zuletzt bearbeitet von einem Moderator:
Upsa - da hat der saftmeister recht - habe natürlich die Funktionsklammern bei mysql_error() vergessen.
Hab' die mal dazu editiert.. :)
 
Zurück