Sollte ich mysqli_real_escape string () oder mysql_real_escape_string () für Formulardaten verwenden? [Duplikat]

9

Ich muss companyname (vom Benutzer über ein Formular angegeben) in meine mysql-Datenbank eingeben. Wenn ich

benutze %Vor%

Ich bekomme einen Fehler

%Vor%

Aber bei der Verwendung von

scheint alles in Ordnung zu sein %Vor%

Was kann ich in solchen Fällen tun?

    
user1629766 03.01.2013, 09:16
quelle

6 Antworten

11

Die zu verwendende Methode hängt davon ab, ob Sie die Erweiterung MySQLi oder die Erweiterung MySQL

verwenden %Vor%     
Anshu 03.01.2013 09:23
quelle
7

mysql_real_escape_string() ist so konzipiert, dass Daten ohne Fehler in die Datenbank eingefügt werden können. (IE wie zum Beispiel das Entkommen von Schrägstrichen, damit es Ihren Code nicht unterbricht).

Sie sollten mysql_ oder mysqli_ functions verwenden, um Ihre Verbindungszeichenfolge zu finden. "mysqli" ist die objektorientierte Implementierung des mysql-Funktionssatzes, so dass die Funktionen im objektorientierten Stil aufgerufen werden. "mysql" ist prozedural. Ich würde vorschlagen, zu "mysqli" zu wechseln, weil ich glaube, dass es in zukünftigen Versionen von der Abwertung der "mysql" -Funktionen gesprochen hat.

Wenn Ihre Verbindungszeichenfolge lautet:

%Vor%

verwende dann:

%Vor%

Wenn es ist:

%Vor%

verwende dann:

%Vor%     
Luke 03.01.2013 09:19
quelle
4

Definitiv NEIN

Beide Funktionen haben nichts mit Formulardaten zu tun.
Sie müssen verwendet werden, um Zeichenfolgenliterale zu formatieren, die in die SQL-Abfrage only eingefügt wurden.
Diese Funktion gehört zu der SQL-Abfrage, nicht in welcher Form auch immer. Und sogar zu einem sehr begrenzten Teil der Abfrage - ein String-Literal.

Jedes Mal, wenn Sie ein String-Literal in die Abfrage einfügen (ehrlich gesagt, ein Teil der Daten in Anführungszeichen), sollte diese Funktion unbedingt verwendet werden.
Für den anderen Fall sollte es überhaupt nicht verwendet werden.

Was den Fehler betrifft, den Sie bekommen - es ist ziemlich selbsterklärend: Diese Funktion erwartet 2 Parameter, nicht einen. Übergeben Sie einfach die richtigen Parameter, wie in der Handbuchseite für diese Funktion angegeben, und Sie werden in Ordnung sein

    
Your Common Sense 03.01.2013 09:22
quelle
0

Da die gesamte Erweiterung MySQL veraltet ist , sollten Sie stattdessen die MySQLi -Methoden verwenden, sie sind zukunftssicherer.

    
Oldskool 03.01.2013 09:21
quelle
0

Dies sollte so sein, wenn Sie den prozeduralen Stil verwenden:

%Vor%

wo link ist die Verbindung

oder wenn Sie den objektorientierten Stil verwenden:

%Vor%

Sieh dir das PHP-Handbuch an: Ссылка

    
Perry 03.01.2013 09:21
quelle
0

Beide Varianten sind in Ordnung * (Bitte sehen Sie sich mein Update an).

Wenn Sie mysql_connect verwenden, sollten Sie bei mysql_real_escape_string() bleiben und auch das Verbindungs-Handle übergeben.

Wenn Sie mysqli_connect verwenden, sollten Sie bei mysqli_real_escape_string() bleiben.

AKTUALISIEREN

Wie Jeffrey in den Kommentaren darauf hingewiesen hat, ist die Verwendung von mysql_ functions NICHT in Ordnung. Ich stimme dem zu. Ich habe gerade darauf hingewiesen, dass Sie die Funktion verwenden müssen, die von der MySQL-Erweiterung verwendet wird, die Sie verwenden.

Es kam zu mir, dass es nicht die Frage war, welche MySQL-Extension zu verwenden ist, sondern welche Funktion zum Entschlüsseln von Daten verwendet wird.

Wenn Sie mich fragen:

  • Verwenden Sie mysqli oder PDO , da mysql nicht empfehlenswert und veraltet ist.
  • Übergeben Sie den Connection Handle an die Escape-Funktion oder besser
  • Verwenden Sie vorbereitete Statements ( PDO-Stil )
Stefan 03.01.2013 09:18
quelle