2009-05-20 16 views

risposta

87

Mettere semplicemente:

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

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

Oppure:

SELECT 'This is Ashok\'s Pen.'

sfuggire =)

+6

Potresti voler aggiornare il tuo post per includere mysql_real_escape_string() o addslashes() come possibili soluzioni ... come in uno dei commenti seguenti, l'OP afferma che stanno solo leggendo dal file e inserendo. –

+2

I metodi mysql_ * non sono raccomandati per un uso futuro, in quanto è [deprecato] (https://wiki.php.net/rfc/mysql_deprecation). – hd1

+0

Questa è la risposta giusta, anche se in questi giorni l'opzione migliore è usare uno degli – Ryan

7

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

Edit:

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

Ad es. in C# puoi fare

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

e quindi passare il valore a SP.

+0

Non inserisco i dati manualmente, lo estrai da File e ci saranno i vaklue: la penna di Ashok. Come inserirlo. ho creato una procedura per farlo ... come renderlo corretto. –

+0

Stai chiamando l'SP tramite codice? –

9

Vedere la mia risposta a "How to escape characters 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 mysql_real_escape_string

+1

Non inserisco i dati manualmente, lo estrai da File, e ci saranno dei valori: la penna di Ashok. Come inserirlo creato una procedura per fare questo .. come renderlo corretto. –

5

È necessario sfuggire ai caratteri speciali utilizzando il carattere \.

This is Ashok's Pen. 

diventa:

This is Ashok\'s Pen. 
0

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

In Perl DBI, ad esempio, è possibile utilizzare:

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

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

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

Usa questo codice):

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

mysql_real_escape_string($var);?> 

Questa volontà risolvere il problema perché il database non è in grado di rilevare il carattere speciale della stringa.

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

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 tutte le lingue prog!

3

Questa è una domanda molto vecchia, ma c'è un altro modo per farlo che può essere o meno sicuro, a seconda della prospettiva. Richiede MySQL 5.6 o successivo a causa dell'uso di una specifica funzione di stringa: FROM_BASE64.

Diciamo che dispone di questo messaggio che vuoi inserire:....

"Ah," Nick Quasi Senza Testa agitò una mano elegante, "una questione di nessuna importanza non è come se io veramente volevo unirmi ... Pensavo che avrei applicato, ma apparentemente non ho soddisfatto i requisiti - "

Quella citazione ha un sacco di virgolette singole e doppie e sarebbe un vero dolore inserire in MySQL. Se lo stai inserendo da un programma, è facile sfuggire alle virgolette, ecc. Ma, se devi metterlo in uno script SQL, dovrai modificare il testo (per sfuggire alle virgolette) che potrebbe essere soggetto a errori o sensibile al word-wrapping, ecc.

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

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K

Alcune note sulla Base64 codifica:

  1. Base64 codifica è un codifica binaria, quindi è meglio assicurarsi di avere il proprio set di caratteri corretto quando si esegue la codifica, perché MySQL decodificherà la stringa codificata in base64 in byte e quindi li interpreterà. Assicurati che base64 e MySQL concordino su quale sia la codifica dei caratteri (ti consiglio UTF-8).
  2. Ho avvolto la stringa in 50 colonne per la leggibilità su SO. Puoi avvolgerlo su un numero qualsiasi di colonne che vuoi (o non avvolgere affatto) e funzionerà comunque.

Ora, per caricare questo in MySQL:

INSERT INTO my_table (text) VALUES (FROM_BASE64(' 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.

1

È possibile utilizzare questo codice

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

se mysqli_real_escape_string non funzionare

2

Se si desidera conservare (') apostrofo nel database di utilizzare questo sottostante Codice

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

$ new_value può memorizzare nel database.

Problemi correlati