php/mysql - Einfügen in Datenbank via Variablen
Rossi
- datenbank
Guten Abend zusammen! =)
Ich habe im Zusammenhang mit dem Speichern von Datensätzen mittels Variablen in vielen fertigen Skripts 2 verschiedene Arten gesehen, nämlich ein mal mit Punkten und ein mal ohne Punkte vor und nach der Variablen.
Beispiel 1 :
$eintrag = "INSERT INTO mitarbeiter (vorname, familienname, alter) VALUES ('.$vor.', '.$fam'., '.$age.')";
$eintragen = mysql_query($eintrag);
Beispiel 2 :
$eintrag = "INSERT INTO mitarbeiter (vorname, familienname, alter) VALUES ('$vor', '$fam', '$age')";
$eintragen = mysql_query($eintrag);
Wo liegt da der Unterschied? Gibt es Fälle, wo man einmal die ertse und ein anderes mal die zweite Variante nehmen soll?
Ich hatte folgende interessante Feststellung : Für einen Wet, der in ein Integer-Feld kommt, hat er mir bei der ersten Version IMMER eine 0 eingetragen. Die varchar-Felder waren korrekt gespeichert.
Dann habe ich die 2. Version versucht und dann waren immer ALLE Datensätze korrekt in der Datenbank gespeichert.
Ich würd mich freuen, wenn mir wer erklären könnte, woran das liegt und wo eben der Unterschied zwischen den 2 Versionen ist.
Danke im Voraus
Grüße
ROSSI =)
Hi,
$eintrag = "INSERT INTO mitarbeiter (vorname, familienname, alter) VALUES ('.$vor.', '.$fam'., '.$age.')";
$eintrag = "INSERT INTO mitarbeiter (vorname, familienname, alter) VALUES ('$vor', '$fam', '$age')";
Wo liegt da der Unterschied?
das erfährst Du durch den Vergleich der Ergebnisse eines 'echo $eintrag'.
Gibt es Fälle, wo man einmal die ertse und ein anderes mal die zweite Variante nehmen soll?
Ja. Entscheidend ist nämlich nicht die Erzeugung eines Strings, sondern das Ergebnis - *ausschließlich* dieses wird der Datenbank übermittelt. Das SQL-Statement muss korrekt sein. Die Erzeugung ist abhängig vom Kontext. Bei dem was Du meinst vermutlich von den verwendeten Anführungszeichen. Oder anders gesagt: Eines Deiner Beispiele ist falsch.
Ich hatte folgende interessante Feststellung : Für einen Wet, der in ein Integer-Feld kommt, hat er mir bei der ersten Version IMMER eine 0 eingetragen. Die varchar-Felder waren korrekt gespeichert.
Lasse Dir das erzeugte SQL-Statement ausgeben und vergleiche es mit dem, das die Datenbank erhalten soll.
Ich würd mich freuen, wenn mir wer erklären könnte, woran das liegt und wo eben der Unterschied zwischen den 2 Versionen ist.
Im Ergebnis. Nicht in der Erzeugung.
Cheatah
Danke, Cheatah, aber wenn ich ganz ehrlich bin, das war so fachchinesisch, ich hab nicht wirklich ein Wort verstanden.
Vor dem Insert hab ich mal auf einer Testseite eine echo-Ausgabe mit allen Variablen gemacht. Die wurden korrekt angezeigt. ALso wußte ich, daß sie zumindest übernommen worden sind und zur Verfügung stehen.
Nur den Wert fürs Integer-Feld hat er dann immer mit 0 eingetragen, die anderen Werte wurden richtig eingetragen.
Was hat das mit den Anführungszeichen zu tun? Die sind ja in beiden Fällen gleich. Nur die Punkte fehlen in Fall 2.
Und daß eine Version falsch ist, ist mir klar. Das war ja auch der Grund meiner Frage. *g*
ROSSI
Hi,
Vor dem Insert hab ich mal auf einer Testseite eine echo-Ausgabe mit allen Variablen gemacht. Die wurden korrekt angezeigt.
für _Dich_ korrekt oder für die Datenbank?
Nur den Wert fürs Integer-Feld hat er dann immer mit 0 eingetragen, die anderen Werte wurden richtig eingetragen.
Also nur für Dich korrekt. Beschäftige Dich mit der SQL-Syntax Deines DBMS.
Was hat das mit den Anführungszeichen zu tun? Die sind ja in beiden Fällen gleich. Nur die Punkte fehlen in Fall 2.
Genau. Ich nehme an, die Punkte stammen aus einer Stringerzeugung, die andere Anführungszeichen hatte.
Und daß eine Version falsch ist, ist mir klar. Das war ja auch der Grund meiner Frage. *g*
Das letztendliche SQL-Statement muss eine gültige Syntax haben. Die Erzeugung, also der PHP-Code, sind hierzu ebenso unerheblich, wie die Taktfrequenz Deines Rechners, multipliziert mit Deiner Schuhgröße. Schaue Dir also das SQL-Statement an und überlege Dir, wie Dein DBMS es interpretieren wird.
Cheatah
Schaue Dir also das SQL-Statement an und überlege Dir, wie Dein DBMS es interpretieren wird.
Ich würd das wirklich sofort tun, wenn ich wüßte, was mein "DBMS" ist. *lol*
Schau, hier zum Beispiel, aus einem Poll-Skript :
Am Anfang steht ein
$survey_id = 1;
Und etwas später im Code ein
$query = "SELECT question FROM survey WHERE id = " . $survey_id . "";
Wieso sind hier z.B. die Punkte dabei?
Ich wär ja schon glücklich, wenn ich eine allgemeine Erklärung hätte, wo der Unterschied zwischen der mit- und der ohne-Punkte-Version liegt und wann man was einsetzt.
Ich bin leider, was den Umgang mit Datenbanken betrifft noch SEHR unbeholfen und deshalb mit so fachchinesischen Erklärumgen wohl noch etwas überfordert. =(
ROSSI
Hi,
Ich würd das wirklich sofort tun, wenn ich wüßte, was mein "DBMS" ist. *lol*
Deinem Subject nach zu urteilen, ist Dein DataBase Management System MySQL.
Schau, hier zum Beispiel, aus einem Poll-Skript :
Wie ich bereits sagte, ist jedweder PHP-Code unerheblich. Er muss lediglich das richtige Ergebnis erzeugen.
$query = "SELECT question FROM survey WHERE id = " . $survey_id . "";
Vergleiche diese Anführungszeichen mit denen, die in Deinen Beispielen stehen.
Wieso sind hier z.B. die Punkte dabei?
Lies den Code. Interpretiere ihn Zeichen für Zeichen - genau das macht PHP. Informiere Dich in der PHP-Dokumentation über Strings und deren Operatoren.
Ich wär ja schon glücklich, wenn ich eine allgemeine Erklärung hätte, wo der Unterschied zwischen der mit- und der ohne-Punkte-Version liegt und wann man was einsetzt.
Man setzt immer das ein, was das richtige Ergebnis liefert.
Ich bin leider, was den Umgang mit Datenbanken betrifft noch SEHR unbeholfen
Du bist offenbar schon in der Programmierung unbeholfen, das Konzept von Strings ist Dir fremd. Wie ich in diesem Forum schon mehrfach betont habe, ist PHP somit die mit Abstand schlechteste Sprache für Dich. Du versuchst gerade herauszufinden, was das kleine Drähtchen an der Handgranate macht, indem Du es testweise rausziehst.
und deshalb mit so fachchinesischen Erklärumgen wohl noch etwas überfordert. =(
Finger weg von etwas so gefährlichem wie PHP.
Cheatah
Ich weiß schon, was ein String ist. Aber ich würd einfach so abfragen in dem Fall :
$query = "SELECT ip FROM survey_log WHERE ip = $ip.";
Und das funktioniert auch.
Ich würd halt gerne wissen, wo der Unterschied zum
$query = "SELECT ip FROM survey_log WHERE ip = ' " . $ip . " ' ";
ist.
Hi,
Ich weiß schon, was ein String ist.
nein, offenbar nicht. Über Operatoren hast Du Dich ebenfalls noch nicht informiert.
Aber ich würd einfach so abfragen in dem Fall :
Welchen Grund könnte jemand, dem die Funktionsweise von Strings geläufig sind, dafür haben?
$query = "SELECT ip FROM survey_log WHERE ip = $ip.";
Und das funktioniert auch.
Weißt Du auch, _warum_ das funktioniert?
Ich würd halt gerne wissen, wo der Unterschied zum
$query = "SELECT ip FROM survey_log WHERE ip = ' " . $ip . " ' ";
ist.
In Deinem Ausgangsposting hast Du etwas anderes gefragt. Unabhängig davon erfährst Du dies, wie ich bereits gesagt habe, durch Vergleich der Ergebnisse beider Stringoperationen.
Cheatah
Der Punkt sollte nicht dabei sein.
$query = "SELECT ip FROM survey_log WHERE ip = $irgendwas";
Du brauchst mich jetzt nicht in jeder Antwort als unwissenden Idioten hinstellen. Ich weiß schon, daß ich mit sql erst am Anfang stehe.
Ich hab halt gelernt, daß ich so wie hier oben eine Abfrage mache und wollte einfach nur wissen, wieso man da manchmal auch die Version mit Punkten sieht.
Und genau das selbe war meine Ausgangsfrage. Ich habs ohne Punkte gelernt und wollt wissen, wann und warum man es mit Punkten macht, wenn man etwas in die Datenbank einfügt.
Das ist alles.
Hi,
Du brauchst mich jetzt nicht in jeder Antwort als unwissenden Idioten hinstellen.
dann empfehle ich Dir, Dich vor einer Antwort mit den von mir genannten Schlagworten zu beschäftigen, insbesondere mit Operatoren.
Ich weiß schon, daß ich mit sql erst am Anfang stehe.
Mit SQL hat das Problem nichts zu tun. Dort bemerkst Du nur die Auswirkungen.
Ich hab halt gelernt, daß ich so wie hier oben eine Abfrage mache
Wo und wie hast Du gelernt? Deine Programmierkenntnisse sind mehr als mangelhaft, wenn sich Dir die Frage stellt, mit der Du Dich an uns gewendet hast, und in dem Fall *ist* *PHP* *für* *Dich* *die* *falschestmögliche* *Wahl*! Genauso gut könntest Du im Krokodilgehege spielen gehen.
und wollte einfach nur wissen, wieso man da manchmal auch die Version mit Punkten sieht.
Weil sie dann richtig ist.
Und genau das selbe war meine Ausgangsfrage. Ich habs ohne Punkte gelernt und wollt wissen, wann und warum man es mit Punkten macht, wenn man etwas in die Datenbank einfügt.
Das ist alles.
Die Frage ist ähnlich sinnvoll wie die, warum man das Pluszeichen benutzt, wenn man addieren will. Beschäftige Dich mit Operatoren. Und Finger weg von PHP!
Cheatah
Wie schon gesagt wurde, haben die öminösen Punkte haben nichts damit zu tun, ob es sich um ein SQL Statement handelt oder nicht.
Der Punkt wird in diesem Fall als Zeichenketten-Operator eingesetzt. Nähres zu diesem Thema findest du im PHP-Manual.
http://de2.php.net/manual/de/language.operators.string.php
Wieso glaubt mir keiner, daß ich weiß, daß ein Punkt ein Zeichenkettenoperator ist.
Was ICH nicht verstehe, ist der Zusammenhang mit der Abfrage bzw. beim Einfügen.
Wieso glaubt mir keiner, daß ich weiß, daß ein Punkt ein Zeichenkettenoperator ist.
Was ICH nicht verstehe, ist der Zusammenhang mit der Abfrage bzw. beim Einfügen.
Da gibt es keinen Zusammenhang. Die von dir gepostete Abfrage ist eine teilweise aus Variablen zusammengebastelte Zeichenkette.
Ob ich eine Abfrage nun so zusammenbaue
$query = "SELECT * FROM tabelle WHERE kritierium = ".$variable;
oder so
$query = "SELECT * FROM tabelle WHERE kritierium = $variable";
macht, wie schon _mehrfach_ erwähnt wurde, im Resultat keinen Unterschied. Das Resultat, die Abfrage nämlch, ist in beiden Fällen das selbe. Welche der beiden Varianten man verwendet, ist Geschmackssache.
Hi!
Danke, jetzt ist mir das Licht schon mehr aufgegangen. Ist eh klar. Da hatte ich wohl ein Brett vor den Augen.
Nur eine Unklarheit hab ich noch.
Bei SELECT oder INSERT mit einer Bedingung, ist es da egal, ob ich
... WHERE ip = $irgendwas
oder
... WHERE ip = '$irgendwas'
schreibe?
Bei Änderungen wie SET MUSS man glaub ich die 2. Version nehmen, oder?
Ich wär schon dankbar um einen Link, wo das vielleicht gut erklärt wird. Ein Link zum php Manual ist ja wie wenn einer fliegen lernen will und ich drück ihm wortlos eine 1000 Seiten dicke Beschreibung von der Boeing 737 in die Hand. *g*
Danke nochmal, daß Du mir weitergeholfen hast!
Rossi
Bei SELECT oder INSERT mit einer Bedingung, ist es da egal, ob ich
... WHERE ip = $irgendwas
oder
... WHERE ip = '$irgendwas'
schreibe?
Die '' siud nur bei Zeichenketten, also bei alphanumerischen DB-Feldern (varchar und co), zwingend zu verwenden.
Bei mySQL kannst du, wenn´s dir Spaß macht, auch bei allen anderen Datentypen, also auch bei numerischen Feldern, '' um die Werte setzen.
Also bei Zahlen und Variablen nicht.
... WHERE ip = 4
... WHERE ip = $p
ABER :
... WHERE var="Wort"
Richtig?
Kennst Du zufällig eine gute Seite im Internet, wo ich mich noch genauer damit beschäftigen kann?
Rossi
Korrekt, du hast es.
Kennst Du zufällig eine gute Seite im Internet, wo ich mich noch genauer damit beschäftigen kann?
Nen gutes Einsteigertutorial in mySql unter PHP ist imo http://www.schattenbaum.net/php/, allerdings ersetzt kein noch so Tutorial ein eingehendes Studium der Manuals...
Das ist sicher gut zum Nachschlagen..aber zum Neulernen???
Nen gutes Einsteigertutorial in mySql unter PHP ist imo http://www.schattenbaum.net/php/, allerdings ersetzt kein noch so Tutorial ein eingehendes Studium der Manuals...
Kenn uich auch, da sind aber einige Sachen nicht mehr sehr aktuell.
Die verwendet z.B. noch $HTTP_POST_VARS statt $_POST.
Siehst, SO gut bin ich ja schon, daß ich das erkenne. *lol*
Danke jedenfalls nochmals dafür, daß Du mir geantwortet und geholfen hast und konstruktiver warst als Deine Vorgänger!
Rossi
Hi,
Also bei Zahlen und Variablen nicht.
mit Variablen hat das absolut nicht das geringste zu tun. Die gibt es nur in PHP, nicht in Deinem SQL-Statement. Wie ich nun schon bald ein halbes Dutzend mal gesagt habe: Es kommt *nur* auf das Ergebnis an, nicht auf die Erzeugung!
... WHERE var="Wort"
Ich bezweifle, dass Dein DBMS dies als korrekt ansehen wird. Es unterscheidet nämlich zwischen Single- und Doublequotes.
Kennst Du zufällig eine gute Seite im Internet, wo ich mich noch genauer damit beschäftigen kann?
Das Archiv ist voll davon.
Cheatah
Moin Cheatah
Mhm was ist wohl ein DBMS und womit mag unser geliebter Forumuser sein SQL Statment (was war das doch gleich?) in das Datenbank MangemenSystem bringen?
Fragen Fragen Fragen?
Irgendwie aber lustig.
Sag mal Rossi was machst Du da?
Mit PHP oder mit ASP oder womit?
Lass mal die Glaskugel angucken:
Die sagt mir, du benutzt PHP?
Du hats irgendwo was gefunden wo man Strings zusammensetzt richtig?
Wweist Du was ein String ist?
Das ist eine Zeichenkette, und mit dem Punkt kann man 2 Zeichenketten zu einer zusammensetzen.
Nun zu der eigentlichen Knobelaufgabe. ein SQL Statement ist auch ein String. Hm. Und nu?
Nu must Du gucken warum die Punkte benutzt oder auch nicht. Das können wir Dir leider nicht sagen. Weil wir eben keine Hellseher sind.
TomIRL
Hi Rossi
Deine Frage wurde Dir ja schon beantwortet:
Hier noch ein Tip benutze die SET Syntax, das macht die ganze Sache für Anfänger ein wenig übersichtlicher:
INSERT INTO tabelle
SET
spalten_name=ausdruck,
spalten_name=ausdruck, ...
Gibt Dir vor allen Dingen die Möglichkeit der leichteren Fehlersuche.
Viele Grüße aus Berlin
TomIRL
$eintrag = "INSERT INTO mitarbeiter (vorname, familienname, alter) VALUES ('.$vor.', '.$fam'., '.$age.')";
Das ist Schrott. Wenn schon:
$eintrag = "INSERT INTO mitarbeiter (vorname, familienname, alter) VALUES ('".$vor."', '".$fam'.", '".$age."')";
Diese Variante wird genommen, wenn die Variablen Elemente von Arrays oder Hashes sind. Innerhalb von "" werden diese nicht ausgewertet.
Beispiel:
$eintrag = "INSERT INTO mitarbeiter (vorname, familienname, alter) VALUES ('".$_POST['vor']."', '".$_POST['fam']."', '".$_POST['$age']."')";
Die andere Variante ist syntaktisch einfacher, geht aber nicht mit Arrays, Hashes:
$eintrag = "INSERT INTO mitarbeiter (vorname, familienname, alter) VALUES ('$vor', '$fam', '$age')";
Das funktioniert auch, die einfachen Quotas werden nicht ausgewertet.
Es gibt noch eine dritte:
$eintrag = "INSERT INTO mitarbeiter (vorname, familienname, alter) VALUES ("$vor", "$fam", "$age")";
Und noch eine vierte, fünfte...
Die Aussagen von TomIRL und Cheatah stimmen auch. Der eine macht es Dir einfacher, der andere sagt: lass es Dir ausgeben und schau Dir den SQL- String an, ob er korrekt ist. Wenn der passt, war Deine Methode richtig.