Frage

Wie kann ich einen Wert in MySQL einfügen, die von einfachen oder doppelten Anführungszeichen bestehen. das heißt

This is Ashok's Pen.

Das Apostroph wird Probleme verursachen. Es könnten auch andere Escape-Zeichen sein.

Wie fügen Sie die Daten richtig?

War es hilfreich?

Lösung

Einfach gesagt:

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

So in der Zeichenfolge, ersetzen Sie jedes Apostroph mit zwei von ihnen.

Oder:

SELECT 'This is Ashok\'s Pen.'

Escape it =)

Andere Tipps

Sehen Sie meine Antwort auf "Wie Zeichen in MySQL zu entkommen „

Was auch immer Bibliothek, die Sie MySQL zu sprechen verwenden wird eine Flucht Funktion eingebaut haben, z.B. in PHP können Sie mysqli_real_escape_string oder PDO :: quote

‘sind die Escape-Zeichen. So sollte die Zeichenfolge sein:

  

Dies ist Ashok 'des Pen

Wenn Sie mit einigem Front-End-Code sind, müssen Sie eine Zeichenfolge ersetzen, bevor die Daten an die gespeicherte Prozedur zu senden.

Zum Beispiel in C # können Sie tun,

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

und dann Wert auf die gespeicherte Prozedur übergeben.

Wenn Sie vorbereitete Anweisungen verwenden, wird der Fahrer Laufene behandeln. 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();

Mit diesem Code:

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

    mysql_real_escape_string($var);
?>

Dies wird Ihr Problem lösen, da die Datenbank die Sonderzeichen einer Zeichenfolge nicht erkennen kann.

Es gibt einen anderen Weg, dies zu tun, die auf Ihre Perspektive kann oder auch nicht sicherer sein, je nachdem. Es erfordert MySQL 5.6 oder höher wegen der Verwendung einer bestimmten Zeichenfolge Funktion: FROM_BASE64 .

Angenommen, Sie haben diese Nachricht haben würden Sie einfügen möchten:

„Ah“ Fast winkte Headless Nick eine elegante Hand „, eine Sache nicht von Bedeutung.... Es ist nicht so, dass ich wirklich anschließen wollte.... Ich dachte, ich anwenden würde, aber anscheinend ich nicht erfüllen Anforderungen "-“

hat Dieses Zitat eine Reihe von Einzel- und doppelten Anführungszeichen und würde ein echten Schmerzen einfügen in MySQL sein. Wenn Sie, dass aus einem Programm einfügen, ist es einfach, die Zitate zu entkommen, etc. Aber, wenn man das in einen SQL-Skript setzen hat, werden Sie den Text bearbeiten müssen (um die Anführungszeichen zu entkommen), die Fehler sein könnte anfällig oder empfindlich auf Zeilenumbruch, etc.

Stattdessen können Sie Base64-codieren der Text, so haben Sie einen "sauberen" string:

JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K

Einige Anmerkungen zu Base64-Codierung:

  1. Base64-Kodierung ist eine binäre Codierung , so dass Sie besser sicherstellen, würden, dass Sie Ihren Charakter richtig eingestellt werden, wenn Sie die Codierung zu tun, weil MySQL die Base64-codierte Zeichenfolge entschlüsseln wird in Bytes und dann interpretiert diese. Stellen Sie sicher, base64 und MySQL auf einigen, was die Zeichenkodierung ist (ich empfehle UTF-8).
  2. Ich habe die Zeichenfolge zu 50 Spalten zum besseren Lesbarkeit auf Stack-Überlauf gewickelt. Sie können es auf eine beliebige Anzahl von Spalten wickeln Sie wollen (oder gar nicht wickeln), und es wird immer noch funktionieren.

Nun, dies in MySQL zu laden:

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));

Dies ohne Beanstandungen einfügen, und Sie haben müssen, um einen beliebigen Text in der Zeichenfolge nicht manuell entkommen.

Sie sollten die Sonderzeichen Flucht der \ Zeichen.

This is Ashok's Pen.

Wird:

This is Ashok\'s Pen.

Wenn Sie ( ') Apostroph in der Datenbank verwenden, um dies unter Code behalten möchten

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

$ new_value kann in der Datenbank gespeichert werden.

Sie können diesen Code verwenden,

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

Wenn mysqli_real_escape_string () funktioniert nicht.

In PHP verwenden 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);
?>
$var = mysqli_real_escape_string($conn, $_POST['varfield']);

Wenn Sie PHP verwenden, um nur den addslashes () Funktion verwenden.

PHP Manual addslashes

Für programmatischen Zugriff, können Sie Platzhalter automatisch unsichere Zeichen für Sie zu entkommen.

In Perl DBI zum Beispiel können Sie:

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

Verwenden Sie entweder addslahes () oder mysql_real_escape_string ().

So wie ich das tun, indem Sie mit Delphi:

TheString zu "Flucht":

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 ";

Mit dieser Funktion werden alle Char (39) mit „\ '“ ersetzen so dass Sie Textfelder in MySQL ohne Probleme einfügen oder aktualisieren.

ähnliche Funktionen sind in allen Programmiersprachen!

Vielleicht könnten Sie einen Blick auf Funktion übernehmen QUOTE im Handbuch MySQL.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top