Domanda

Come posso inserire un valore in MySQL che consistono di virgolette singole o doppie. cioè

This is Ashok's Pen.

L'apostrofo creerà problemi. Ci potrebbero essere altri caratteri di escape.

Come si fa a inserire correttamente i dati?

È stato utile?

Soluzione

Mettere semplicemente:

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

Quindi, all'interno della stringa, sostituire ogni apostrofo con due di loro.

o

SELECT 'This is Ashok\'s Pen.'

Escape it =)

Altri suggerimenti

Vedere la mia risposta a "Come sfuggire caratteri in MySQL "

Qualunque sia la biblioteca che si utilizza per comunicare con MySQL avrà una funzione di fuga integrato, per esempio in PHP è possibile utilizzare mysqli_real_escape_string o PDO :: citazione

' è il carattere di escape. Così la stringa dovrebbe essere:

  

Questa è Pen Ashok 'di

Se si utilizza un codice di front-end, è necessario fare una stringa sostituire prima di inviare i dati alla stored procedure.

Per esempio, in C # si può fare

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

e quindi passare il valore alla stored procedure.

Se si utilizza istruzioni preparate, il driver di gestire qualsiasi fuga. Per esempio (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();

Utilizzare questo codice:

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

    mysql_real_escape_string($var);
?>

Questo risolverà il vostro problema, perché il database non è in grado di rilevare i caratteri speciali di una stringa.

C'è un altro modo per fare questo, che può o non può essere più sicuro, a seconda del punto di vista. Richiede MySQL 5.6 o successiva per l'utilizzo di una funzione stringa specifica: FROM_BASE64 .

Diciamo che dispone di questo messaggio che vuoi inserire:

"Ah," Nick Quasi Senza Testa agitò una mano elegante, "una questione di importanza.... Non è come se avessi veramente voluto aderire.... Ho pensato di applicare, ma a quanto pare Sono non soddisfano i requisiti '-"

Quella citazione ha un mucchio di virgolette doppie single o e sarebbe un vero e proprio dolore per inserire in MySQL. Se si inserisce che da un programma, è facile sfuggire alle citazioni, ecc Ma, se si deve mettere che in uno script SQL, dovrete modificare il testo (per sfuggire le virgolette) che potrebbe essere soggetto a errori o sensibili al word-wrapping, ecc.

Invece, è possibile Base64-codificare il testo, in modo da avere una stringa "pulita":

JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K

Alcune note sulla Base64-encoding:

  1. Base64 codifica è un codifica binaria , quindi è meglio fare in modo che si ottiene il vostro personaggio impostato correttamente quando si esegue la codifica, perché MySQL sta per decodificare la stringa con codifica Base64 in byte e poi interpretare tali. Assicurarsi base64 e MySQL sono d'accordo su ciò che la codifica dei caratteri è (mi raccomando UTF-8).
  2. Ho avvolto la stringa da 50 colonne per una migliore leggibilità su Stack Overflow. Si può avvolgere a qualsiasi numero di colonne che si desidera (o non avvolgere affatto) e sarà ancora lavorare.

Ora, per caricare questo in MySQL:

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

Questo inserirà senza alcuna lamentela, e non c'era bisogno di manualmente sfuggire a qualsiasi testo all'interno della stringa.

Si dovrebbe sfuggire i caratteri speciali utilizzando il carattere \.

This is Ashok's Pen.

diventa:

This is Ashok\'s Pen.

Se si desidera conservare ( ') apostrofo nel database di utilizzare questo codice sotto

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

$ nuovo_valore può memorizzare nel database.

È possibile utilizzare questo codice,

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

se mysqli_real_escape_string () non funziona.

In PHP, utilizzare mysqli_real_escape_string ..

Esempio da manuale di PHP:

<?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']);

Se si sta utilizzando PHP, basta usare i addslashes () la funzione.

Manuale PHP addslashes

Per l'accesso programmatico, è possibile utilizzare segnaposto per sfuggire automaticamente caratteri non sicuri per voi.

In Perl DBI, per esempio, è possibile utilizzare:

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

Usa sia addslahes () o mysql_real_escape_string ().

Il mio modo di fare, utilizzando Delphi:

TheString alla "fuga":

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

Soluzione:

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

Risultato:

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

Questa funzione sostituirà tutti Char (39) con "\ '" che consente di inserire o aggiornare i campi di testo in MySQL senza alcun problema.

funzioni simili si trovano in tutti i linguaggi di programmazione!

Forse si potrebbe dare un'occhiata a funzione di QUOTE nel manuale di MySQL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top