it-swarm.com.de

Wie füge ich Sonderzeichen in eine Datenbank ein?

Kann mir jemand sagen, wie man Sonderzeichen in eine MySQL-Datenbank einfügt? Ich habe ein PHP -Skript gemacht, das einige Wörter in eine Datenbank einfügen soll. Wenn das Word jedoch ein 'enthält, wird es nicht eingefügt. 

Ich kann die Sonderzeichen gut einfügen, wenn ich PHPmyAdmin verwende, aber es funktioniert nicht, wenn sie über PHP eingefügt werden. Könnte es sein, dass PHP die Sonderzeichen in etwas anderes umwandelt? Wenn ja, gibt es eine Möglichkeit, sie richtig einzufügen? 

17
Joey Morani
$insert_data = mysql_real_escape_string($input_data);

Angenommen, Sie haben die Daten als $input_data gespeichert.

28
Anthony

Flüchten Sie? Probieren Sie die Funktion mysql_real_escape_string () aus, um die Sonderzeichen zu behandeln.

9
zaf

benutze mysql_real_escape_string

Was macht also mysql_real_escape_string?

Diese PHP -Bibliotheksfunktion fügt den folgenden Zeichen Backslashes hinzu:\n,\r, \,\x00,\x1a, 'und'. Der wichtige Teil ist, dass die einfachen und doppelten Anführungszeichen mit Escapezeichen versehen werden, da dies die Zeichen sind, die am wahrscheinlichsten Schwachstellen öffnen.

Bitte informieren Sie sich über sql_injection. Sie können diesen link als Anfang verwenden

6
Peter Parker

Es ist wahrscheinlich, dass Sie den SQL-String umgehen, ähnlich wie:

SELECT * FROM `table` WHERE `column` = 'Here's a syntax error!'

Sie müssen Anführungszeichen wie folgt umgehen:

SELECT * FROM `table` WHERE `column` = 'Here\'s a syntax error!'

mysql_real_escape_string() erledigt dies für Sie.

5
Paul Lammertsma

Sie fügen sie möglicherweise direkt in eine Abfrage ein. Sie sollten sie "entkommen", indem Sie die entsprechende Funktion - mysql_real_escape_string , mysqli_real_escape_string oder PDO :: quote verwenden, abhängig von der verwendeten Erweiterung.

5

Beachten Sie, dass, wie andere darauf hingewiesen haben, mysql_real_escape_string () das Problem lösen wird (wie addlashes), jedoch aus Sicherheitsgründen sollten Sie immer mysql_real_escape_string () verwenden - bedenken Sie Folgendes:

SELECT * FROM valid_users WHERE username='$user' AND password='$password'

Was ist, wenn der Browser sendet?

user="admin' OR (user=''"
password="') AND ''='"

Die Abfrage wird zu:

SELECT * FROM valid_users 
WHERE username='admin' OR (user='' AND password='') AND ''=''

die Sicherheitsprüfungen werden vollständig umgangen.

C.

3
symcbean

Wahrscheinlich funktioniert "mysql_real_escape_string()" für u

2
OM The Eternity

die Funktion htmlspecialchars ist die beste Lösung. Heute suchte ich nach dem Einfügen von Zeichenketten mit Sonderzeichen, und der Google hat so viele Stackoverflow-Einträge ausgelöst. Ich habe es in der w3schools-Seite gefunden. Ja, ich könnte mein Problem mit dieser Funktion lösen:

$abc = $POST['xyz'];

$abc = htmlspecialchars($abc);
0
Solomon Sudhir

Zum Beispiel:  
$ parent_category_name = Herrenbekleidung
Betrachten Sie hier die SQL-Abfrage

$sql_category_name = "SELECT c.*, cd.name, cd.category_id  as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" .  $this->db->escape($parent_category_name) . "' AND c.parent_id =0 "; 

Error:

Static analysis:

1 errors were found during analysis.

Ending quote ' was expected. (near "" at position 198)
SQL query: Documentation

SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men's Clothing' AND c.parent_id =0 LIMIT 0, 25

MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Clothing' AND c.parent_id =0 LIMIT 0, 25' at line 1

Versuchen Sie zu implementieren:

$this->db->escape($parent_category_name)

Die obige Methode funktioniert mit dem OpenCart-Framework. Finden Sie Ihr Framework und implementieren Sie OR mysql_real_escape_string() in Core PHP

In meinem Fall wird dies zu Herrenbekleidung

$sql_category_name = "SELECT c.*, cd.name, cd.category_id  as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" .  $this->db->escape($parent_category_name) . "' AND c.parent_id =0 "; 

So erhalten Sie ein klares Bild der Abfrage, indem Sie escape () als implementieren

SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men\'s Clothing' AND c.parent_id =0
0
Nishanth ॐ

Verwenden Sie dies: htmlentities($_POST['field']); 

Genug nur. Dies für besonderen Charakter:

Verwendung für CI htmlentities($this->input->post('control_name'));

0
Soyab Badi
$var = mysql_real_escape_string("data & the base");
$result = mysql_query('SELECT * FROM php_bugs WHERE php_bugs_category like  "%' .$var.'%"');
0
amarjit singh