Wie man einfachen Anführungszeichen in MySQL entkommt

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

This is Ashok's Pen. 

Das einfache Zitat wird Probleme verursachen. Es könnte andere Escape-Zeichen geben.

Wie fügen Sie die Daten richtig ein?

Solutions Collecting From Web of "Wie man einfachen Anführungszeichen in MySQL entkommt"

Ganz einfach gesagt:

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

Ersetzen Sie also in der Zeichenfolge jedes einzelne Anführungszeichen durch zwei.

Oder:

SELECT 'This is Ashok\'s Pen.'

Entkomme es =)

Siehe meine Antwort auf “Wie man Zeichen in MySQL entkommt”

Für jede Bibliothek, die Sie verwenden, um mit MySQL zu sprechen, wird eine Escapefunktion eingebaut, zB in PHP können Sie mysqli_real_escape_string oder PDO :: quote verwenden

“ist der Fluchtcharakter. Deine Saite sollte also sein: Das ist Ashoks Pen

Bearbeiten:

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

Für z. in C # können Sie tun

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

und dann den Wert an SP übergeben.

Wenn Sie vorbereitete statementen verwenden, wird der Treiber für alle Escapes zuständig sein. 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(); 

Sie sollten die Sonderzeichen mit dem Zeichen \ umgehen.

 This is Ashok's Pen. 

Wird:

 This is Ashok\'s Pen. 

Benutze diesen Code:

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

Dies wird Ihr Problem lösen, weil die database das Sonderzeichen der Zeichenfolge nicht erkennen kann.

Wenn Sie (‘) Apostroph in der database behalten möchten, benutzen Sie diesen Code unten

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

$ new_value kann in der database speichern.

Das ist eine wirklich alte Frage, aber es gibt einen anderen Weg, dies zu tun, der je nach Perspektive vielleicht sicherer ist. Es erfordert MySQL 5.6 oder höher wegen der Verwendung einer spezifischen String-function: FROM_BASE64 .

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

“Ah,” Fast kopfloser Nick winkte mit einer eleganten Hand, “eine Sache ohne Bedeutung… Es ist nicht so, als ob ich wirklich mitmachen wollte …. Ich dachte, ich würde mich bewerben, aber anscheinend erfülle ich die Anforderungen nicht “-”

Dieses Zitat enthält eine Reihe von einfachen und doppelten Anführungszeichen und es wäre sehr schwierig, es in MySQL einzufügen. Wenn Sie das aus einem Programm einfügen, ist es leicht, die Anführungszeichen usw. zu umgehen. Aber wenn Sie das in ein SQL-Skript schreiben müssen, müssen Sie den Text bearbeiten (um die Anführungszeichen zu umgehen), was errorsanfällig sein könnte oder empfindlich auf das Umwickeln von Wörtern usw.

Stattdessen können Sie den Text mit Base64 codieren, sodass Sie eine “saubere” Zeichenfolge haben:

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K

Einige Hinweise zur base64-Codierung:

  1. base64-encoding ist eine Binärcodierung , also sollten Sie besser sicherstellen, dass Sie Ihren Zeichensatz korrekt erhalten, wenn Sie die Codierung durchführen, weil MySQL die base64-codierte Zeichenfolge in Bytes decodieren und dann interpretieren wird. base64 Sie sicher, dass base64 und MySQL übereinstimmen, was die Zeichencodierung ist (ich empfehle UTF-8).
  2. Ich habe die Zeichenfolge auf 50 Spalten für die Lesbarkeit auf SO gewickelt. Sie können es in eine beliebige Anzahl von Spalten umbrechen (oder nicht umbrechen) und es wird weiterhin funktionieren.

Nun, 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 mussten keinen Text innerhalb der Zeichenfolge manuell entkommen lassen.

Sie können diesen Code verwenden

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

Wenn mysqli_real_escape_string nicht funktioniert

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

Für den programmgesteuerten Zugriff können Sie Platzhalter verwenden , um unsichere Zeichen automatisch für Sie zu entfernen.

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

Wenn Sie PHP verwenden, verwenden Sie einfach die function addslashes ()

PHP Manual addslashes

Vielleicht können Sie sich die function Quote im Mysql-Handbuch ansehen.

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

So wie ich es mache, indem ich Delphi benutze:

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 function ersetzt alle Zeichen (39) durch “\ ‘”, so dass Sie Textfelder in MySQL problemlos einfügen oder aktualisieren können.

Ähnliche functionen finden sich in allen Programmiersprachen!

Verwenden Sie entweder addslashes () oder mysql_real_escape_string