it-swarm.com.de

So vermeiden Sie einfache Anführungszeichen in MySQL

Wie füge ich in MySQL einen Wert ein, der aus einfachen oder doppelten Anführungszeichen besteht? d.h.

This is Ashok's Pen.

Das einfache Anführungszeichen führt zu Problemen. Es könnte andere Fluchtzeichen geben. 

Wie füge ich die Daten richtig ein?

86
Ashok Gupta

Einfach gesagt:

SELECT 'This is Ashok''s Pen.';

Ersetzen Sie also innerhalb der Zeichenfolge jedes einzelne Zitat durch zwei.

Oder:

SELECT 'This is Ashok\'s Pen.'

Escape =)

102
Rob

Siehe meine Antwort auf "So schützen Sie Zeichen in MySQL"

In welcher Bibliothek auch immer Sie mit MySQL sprechen, wird eine Escape-Funktion eingebaut, z. In PHP können Sie mysqli_real_escape_string oder PDO :: quote verwenden.

9
Paul Dixon

'ist das Fluchtzeichen. Ihre Saite sollte also Folgendes sein: Dies ist Ashoks Pen

Bearbeiten:

Wenn Sie Front-End-Code verwenden, müssen Sie einen String ersetzen, bevor Sie die Daten an den SP senden.

Für zB In C # können Sie das tun 

value = value.Replace("'","''");

und dann Wert an SP übergeben.

8
Rashmi Pandit

Wenn Sie vorbereitete Anweisungen verwenden, wird der Treiber die Flucht umgehen. Zum Beispiel (Java):

Connection conn = DriverManager.getConnection(driverUrl);
conn.setAutoCommit(false);
PreparedStatement prepped = conn.prepareStatement("INSERT INTO tbl(fileinfo) VALUES(?)");
String line = null;
while ((line = br.readLine()) != null) {
    prepped.setString(1, line);
    prepped.executeQuery();
}
conn.commit();
conn.close();
7
hd1

Dies ist eine wirklich alte Frage, aber es gibt einen anderen Weg, dies zu tun, der je nach Ihrer Perspektive sicherer sein kann oder nicht. Es erfordert MySQL 5.6 oder höher, weil eine bestimmte Zeichenfolgenfunktion verwendet wird: FROM_BASE64 .

Nehmen wir an, Sie haben diese Nachricht, die Sie einfügen möchten:

"Ach", "Fast ohne Kopf winkte Nick mit einer eleganten Hand", eine Angelegenheit ohne Bedeutung. Es ist nicht so, als wollte ich wirklich mitmachen. Ich dachte, ich würde mich bewerben, aber ich glaube nicht. t erfüllt die Anforderungen '- "

Dieses Zitat enthält eine Reihe von einfachen und doppelten Anführungszeichen und wäre in MySQL sehr schwierig. Wenn Sie das aus einem Programm einfügen, können Sie die Anführungszeichen usw. leicht entgehen. Wenn Sie das jedoch in ein SQL-Skript einfügen müssen, müssen Sie den Text bearbeiten (um die Anführungszeichen zu entgehen), was zu Fehlern führen kann oder empfindlich für Word-Wrapping usw.

Stattdessen können Sie den Text base64-kodieren, so dass Sie eine "saubere" Zeichenfolge haben:

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K

Einige Anmerkungen zur base64-Kodierung:

  1. die base64-Codierung ist eine binary-Codierung. Sie sollten daher sicherstellen, dass Sie den Zeichensatz richtig einstellen, wenn Sie die Codierung durchführen, da MySQL die base64-codierte Zeichenfolge in Byte decodiert und diese dann interpretiert. Stellen Sie sicher, dass base64 und MySQL die Zeichenkodierung übereinstimmen (ich empfehle UTF-8).
  2. Ich habe die Zeichenfolge zur besseren Lesbarkeit in SO auf 50 Spalten geschrieben. Sie können es in eine beliebige Anzahl von Spalten umbrechen (oder gar nicht umbrechen), und es funktioniert weiterhin.

Um dies in MySQL zu laden:

INSERT INTO my_table (text) VALUES (FROM_BASE64(' SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K '));

Dies wird ohne Beanstandungen eingefügt, und Sie müssen keinen Text innerhalb der Zeichenfolge manuell sperren.

6

Sie sollten die Sonderzeichen mit dem Zeichen \ ersetzen.

This is Ashok's Pen.

Wird:

This is Ashok\'s Pen.
5
simon622

Verwenden Sie diesen Code:

<?php $var = "This is Ashok's Pen.";

 mysql_real_escape_string($var);?>

Dies löst Ihr Problem, da die Datenbank das Sonderzeichen der Zeichenfolge nicht erkennen kann. 

5
user3818708

Wenn Sie (') Apostroph in der Datenbank behalten möchten, verwenden Sie den folgenden Code

$new_value = str_replace("'","\'", $value); 

$ new_value kann in der Datenbank speichern.

3
Dheeraj singh

Sie können diesen Code verwenden

<?php
     $var = "This is Ashok's Pen.";
     addslashes($var);?>

wenn mysqli_real_escape_string nicht funktioniert

3

Verwenden Sie in PHP mysqli_real_escape_string ..

Beispiel aus dem PHP Handbuch:

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");

$city = "'s Hertogenbosch";

/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("Error: %s\n", mysqli_sqlstate($link));
}

$city = mysqli_real_escape_string($link, $city);

/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("%d Row inserted.\n", mysqli_affected_rows($link));
}

mysqli_close($link);
?>
2
Marcel Verwey

wenn Sie php verwenden, verwenden Sie einfach die Funktion addslashes () 

PHP Manual addlashes

1
Sonu
$var = mysqli_real_escape_string($conn, $_POST['varfield']);

Für den programmatischen Zugriff können Sie Platzhalter verwenden, um unsichere Zeichen automatisch für Sie zu schützen. 

In Perl DBI können Sie beispielsweise Folgendes verwenden:

my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string)); 
0
Elle Fie

verwenden Sie entweder addslahes (), oder mysql_real_escape_string

0
Anthony

Vielleicht können Sie sich die Funktion Quote im MySQL-Handbuch ansehen. 

http://dev.mysql.com/doc/refman/5.7/de/string-functions.html#function_quote

0
Julian

So wie ich das mit Delphi mache:

TheString "zu entkommen":

TheString=" bla bla bla 'em some more apo:S 'em and so on ";

Lösung:

StringReplace(TheString, #39,'\'+#39, [rfReplaceAll, rfIgnoreCase]);

Ergebnis:

TheString=" bla bla bla \'em some more apo:S \'em and so on ";

Diese Funktion ersetzt alle Zeichen (39) durch "\", sodass Sie Textfelder problemlos in MySQL einfügen oder aktualisieren können.

Ähnliche Funktionen gibt es in allen Prog-Sprachen!

0
user7276516