php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 09-12-2006, 11:16
gugug
 Newbie
Links : Onlinestatus : gugug ist offline
Registriert seit: Dec 2006
Beiträge: 7
gugug ist zur Zeit noch ein unbeschriebenes Blatt
Standard mysql_real_escape_string

Hallo Zusammen,
ich habe ein Problem mit mysql_real_escape_string(); aber zuerst zu meinem Verständnis der Funktion:
$c = "\\'"; (backslash, einfaches Anführungszeichen) (gehört eigentlich in den Code, aber dann frisst er die backslashes nicht!)
PHP-Code:

$d 
mysql_real_escape_string($c);
echo 
$d
jetzt sollte da stehen: \\\\'
Stimmt das so?
Ich benütze diese Funktion aber für einen sehr langen Text (schreiben in die db) und da passiert nichts! (Es wird zuerst mysql_connect aufgerufen, magic_quotes_qpc und alle anderen magic_quotes sind off).
Gibt es eventuell eine Stringlängenbegrenzung?
Oder wo könnte der Fehler sonst noch liegen?
Danke für jedes Interesse.
Felix

(nicht mal hier kommen die backslashes richtig...)
Mit Zitat antworten
  #2 (permalink)  
Alt 10-12-2006, 12:11
gugug
 Newbie
Links : Onlinestatus : gugug ist offline
Registriert seit: Dec 2006
Beiträge: 7
gugug ist zur Zeit noch ein unbeschriebenes Blatt
Standard weitere nachforschung

hallo zusammen,
habe lange keine antwort erhalten?
na ja, zeit für mich, mich schlau zu machen und mein verständnis zu erweitern:
mysql_real_escape_string() schreibt gar keine zusätzlichen backslashes in die db? er braucht diese funktion nur um das statement zu verarbeiten, entfernt sie aber wieder vor dem schreiben und deshalb ist der text wie er geschrieben wurde in der db.
stimmt mein verständnis?
danke für die bestätigung!
gruss
felix
Mit Zitat antworten
  #3 (permalink)  
Alt 10-12-2006, 12:18
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Richtig
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #4 (permalink)  
Alt 10-12-2006, 12:33
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Vielleicht hilft ein Beispiel:
PHP-Code:
$string "foo ' bar";
$sql "SELECT * FROM table WHERE txt = '$string'"
Wenn du die Query so absetzt, ist sie syntaktisch nicht korrekt, MySQL meldet einen Fehler.
Sie sieht nämlich so aus:
SELECT * FROM table WHERE txt = 'foo ' bar'
Soweit stimmts ja:
SELECT * FROM table WHERE txt = 'foo '
aber das bar' hinten dran ist zuviel.

Verwendest du aber mysql_real_escape_string(), sieht die Query so aus:
SELECT * FROM table WHERE txt = 'foo \\' bar'
Die Funktion entschärft nämlich alle Steuerzeichen. Das sind Zeichen, die die Semantik einer Query beeinflussen, wie zum Beispiel '.
MySQL versteht ' als Stringbegrenzung, aber \\' als Character '. Ein einfaches ' wird deswegen niemals in der DB landen, denn es eröffnet oder beendet einen String in SQL. Will man ein ' in der DB speichern, muß man es vom Steuerzeichen zum Character degradieren. Dazu dient mysql_real_escape_string().

In Kurz: Die Funktion wandelt Steuerzeichen in einfache Zeichen um, so daß sie die Syntax und Semantik einer Query nicht beeinflussen können.

Dein Verständnis ist also richtig. Schreibt man 'foo\\'bar' in eine Query, ist das für MySQL der String "foo'bar". Das \\' wird als ein Zeichen angesehen - aber eben nicht als das Zeichen ' was ja ein Steuerzeichen wäre.
Mit Zitat antworten
  #5 (permalink)  
Alt 11-12-2006, 14:28
gugug
 Newbie
Links : Onlinestatus : gugug ist offline
Registriert seit: Dec 2006
Beiträge: 7
gugug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke. Und danke für die ausführliche Antwort. Wieso steht das nirgendwo in der Referenz? oder ist mein ehemaliges Verständnis so abwegig?
gruss
felix
Mit Zitat antworten
  #6 (permalink)  
Alt 11-12-2006, 14:38
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von gugug
Wieso steht das nirgendwo in der Referenz?
Da steht doch genau beschrieben, was die Funktion macht, und wofür sie einzusetzen ist -
Zitat:
Maskiert spezielle Zeichen innerhalb eines Strings für die Verwendung in einer SQL-Anweisung
Zitat:
oder ist mein ehemaliges Verständnis so abwegig?
Wenn man sich erst mal klargemacht hat, wofür die Funktion da ist - ja.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 11-12-2006, 14:47
gugug
 Newbie
Links : Onlinestatus : gugug ist offline
Registriert seit: Dec 2006
Beiträge: 7
gugug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Jaaaa, aber: ich verwende die Funktion ja in einer mysql Anweisung.
Aber, was die Funktion genau macht, nämlich, dass sie nur die Zeichen für die mysql interne Verarbeitung maskiert, steht da nirgends.
Klar man könnte mir Haarspalterei vorwerfen oder aber vielleicht habe ich auch nach zu viel gefragt...
Nichts für Ungut und danke nochmals.
gruess
felix
Mit Zitat antworten
  #8 (permalink)  
Alt 11-12-2006, 14:51
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von gugug
Aber, was die Funktion genau macht, nämlich, dass sie nur die Zeichen für die mysql interne Verarbeitung maskiert, steht da nirgends.
Das ergibt sich doch implizit.

Die Funktion soll ja nicht die Daten korrumpieren, sondern sie nur für die Schnittstelle aufbereiten.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #9 (permalink)  
Alt 11-12-2006, 16:46
gugug
 Newbie
Links : Onlinestatus : gugug ist offline
Registriert seit: Dec 2006
Beiträge: 7
gugug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, aber wieso soll ich eine Funktion ausführen, die für mich im Prinzip nichts macht? Das führt zur Frage, wieso mysql nicht automatisch alle Strings real_escaped? Da gebe ich mir die Antwort gleich selbst, weil das je nach dem gewollt sein könnte.
Aber aufgrund der zweiten Antwort muss ich wissen, was sie macht, wenn es für mich kein Egebnis produziert. Try and Error funktioniert sonst nicht...
Gruess
Felix
Mit Zitat antworten
  #10 (permalink)  
Alt 11-12-2006, 16:56
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von gugug
Ja, aber wieso soll ich eine Funktion ausführen, die für mich im Prinzip nichts macht?
Das täte sie für dich ja nur, wenn du nicht in der Lage wärst zu Lesen, was das Manual beschreibt (oder nicht in der, Gelesenes zu verstehen).
Zitat:
Das führt zur Frage, wieso mysql nicht automatisch alle Strings real_escaped?
Weil sie das gar nicht kann [1].
Sie bekommt einen String übergeben, der in PHP zusammengesetzt wurde - und entweder enthält dieser String eine SQL-Anweisung in einer Syntax, die sie verstehen kann, oder eben nicht - und dann müsste sie wild rumraten.
Und wollen wir eine Datenbank, die versucht zu raten was wir gemeint haben könnten? Nein, wollen wir nicht - das könnte viel zu leicht ins Auge gehen - wir wollen eine Datenbank, die genau das tut, was wir ihr sagen.


[1] mysqli und prepared Statements sind zwar schon was Fein(er)es - aber da erledigt das auch die API, und nicht "die Datenbank selber".
Zitat:
Aber aufgrund der zweiten Antwort muss ich wissen, was sie macht, wenn es für mich kein Egebnis produziert.
Sie produziert doch ein Ergebnis - einen String, in dem Sonderzeichen derart maskiert sind, dass MySQL sie nicht mehr missverstehen kann.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #11 (permalink)  
Alt 11-12-2006, 17:07
gugug
 Newbie
Links : Onlinestatus : gugug ist offline
Registriert seit: Dec 2006
Beiträge: 7
gugug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, aber um herauszufinden, was die Funktion macht, wende ich sie an. Ich schaue in der DB nach und siehe da, es ist nichts passiert. Aber überall schreiben sie, man soll diese Funktion verwenden. Da schau ich im Manual nach und lese: "Maskiert spezielle Zeichen innerhalb eines Strings für die Verwendung in einer SQL-Anweisung". Da denke ich mir, gut wird wohl so sein, dennoch möchte ich wissen wie die genau funktioniert.
Und ein kleiner Zusatz im Manual à la "maskiert Strings für die Verarbeitung innerhalb des mysql Blocks" ist wohl nicht zu viel verlangt und würde wahrscheinlich anfängliche Unklarheiten beseitigen.
gruess
Mit Zitat antworten
  #12 (permalink)  
Alt 11-12-2006, 17:17
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von gugug
Ja, aber um herauszufinden, was die Funktion macht, wende ich sie an. Ich schaue in der DB nach und siehe da, es ist nichts passiert.
"Was ich nicht sehen kann, das gibt es nicht"?

Du schaust zu spät nach. Du hast in PHP eine Funktion angewendet, deren Einsatz notwendig ist, bevor du Daten von PHP an MySQL übergibst. Also schau auch "in" PHP nach (Kontrollausgabe), bevor du die Daten an MySQL übergibst.

Zitat:
Da schau ich im Manual nach und lese: "Maskiert spezielle Zeichen innerhalb eines Strings für die Verwendung in einer SQL-Anweisung". Da denke ich mir, gut wird wohl so sein, dennoch möchte ich wissen wie die genau funktioniert.
Und ein kleiner Zusatz im Manual à la "maskiert Strings für die Verarbeitung innerhalb des mysql Blocks" ist wohl nicht zu viel verlangt
Nein, sondern überflüssig.

Was soll denn ein "MySQL Block" sein?

Wir setzen Daten in eine MySQL-Anweisung ein - und genau davon ist da die Rede.
Zitat:
und würde wahrscheinlich anfängliche Unklarheiten beseitigen.
Nein, es wäre eher noch verwirrend - ausser dir weiss vermutlich kein Mensch, was ein "MySQL Block" sein soll.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:42 Uhr.