2009-05-20 7 views

Répondre

87

Mettez tout simplement:

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

Donc, dans la chaîne, remplacez chaque guillemet simple avec deux d'entre eux.

Ou:

SELECT 'This is Ashok\'s Pen.'

échapper =)

+6

Vous voudrez peut-être mettre à jour votre message pour inclure mysql_real_escape_string() ou addslashes() comme solutions possibles ... comme dans l'un des commentaires ci-dessous, l'OP indique qu'il ne fait que lire le fichier et l'insérer. –

+2

Les méthodes mysql_ * ne sont pas recommandées pour une utilisation future, car elles sont [obsolète] (https://wiki.php.net/rfc/mysql_deprecation). – hd1

+0

C'est la bonne réponse, même si ces jours-ci la meilleure option est d'utiliser l'un des – Ryan

7

'est le caractère d'échappement. Ainsi, votre chaîne doit être: C'est Pen 'de Ashok

Edit:

Si vous utilisez un code frontal, vous devez faire une chaîne remplacer avant d'envoyer les données à la SP.

Par exemple. en C# vous pouvez faire

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

puis passer la valeur à SP.

+0

Je n'insère pas de données manuellement, je l'extrait de File, et il y aura des vaklues: le stylo d'Ashok. Comment l'insérer. créait une procédure pour ce faire .. comment le rendre correct. –

+0

Appelez-vous le SP via le code? –

9

Voir ma réponse à "How to escape characters in MySQL"

Quelle que soit la bibliothèque que vous utilisez pour parler MySQL aura une fonction fuite intégrée, par exemple en PHP vous pouvez utiliser mysql_real_escape_string

+1

Je n'insère pas de données manuellement, je l'extrait de fichier, et il y aura des valeurs: stylo Ashok. Comment l'insérer. créé une procédure pour ce faire .. comment le rendre correct. –

5

Vous devez échapper les caractères spéciaux en utilisant le caractère \.

This is Ashok's Pen. 

Devient:

This is Ashok\'s Pen. 
0

Pour un accès par programme, vous pouvez utiliser placeholders pour échapper automatiquement les caractères dangereux pour vous.

En Perl DBI, par exemple, vous pouvez utiliser:

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

Si vous utilisez des instructions préparées, le conducteur se chargera tout se échapper. Par exemple (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

En PHP, utilisez mysqli_real_escape_string.

Exemple du manuel 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

Utilisez ce code:

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

mysql_real_escape_string($var);?> 

Cette volonté résoudre votre problème cause base de données ne peut pas détecter le caractère spécial de la chaîne.

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

comme je le fais, en utilisant Delphi:

LaChaîne à "échapper":

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

Solution:

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

Résultat:Cette fonction remplacera tout Char (39) par "\", ce qui vous permet d'insérer ou de mettre à jour des champs de texte dans MySQL sans aucun problème.

Des fonctions similaires sont trouvées dans tous les langages prog!

3

Ceci est une question vraiment ancienne, mais il existe une autre façon de le faire qui peut ou non être plus sûr, selon votre point de vue. Il nécessite MySQL 5.6 ou plus tard en raison de l'utilisation d'une fonction de chaîne spécifique: FROM_BASE64.

Disons que vous avez ce message que vous souhaitez insérer:....

« Ah, » Presque Headless Nick fit signe une main élégante, « une question sans importance Il est pas comme si je vraiment Je voulais m'inscrire ... Je pensais appliquer, mais apparemment je ne réponds pas aux exigences - "

Cette citation a un tas de guillemets simples et doubles et serait une vraie douleur à insérer en MySQL. Si vous insérez cela depuis un programme, il est facile d'échapper les guillemets, etc. Mais, si vous devez mettre cela dans un script SQL, vous devrez éditer le texte (pour échapper les guillemets) qui pourrait être source d'erreur ou sensible au mot-emballage, etc.

Au lieu de cela, vous pouvez base64 encode le texte, de sorte que vous avez une chaîne "propre":

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K

Quelques notes sur base64-Encoding:

  1. base64-encodage est un codage binaire, donc vous feriez mieux de vous assurer que vous obtenez votre jeu de caractères correct lorsque vous faites l'encodage, car MySQL va décoder la chaîne encodée en base64 en octets, puis interpréter ceux-ci. Assurez-vous que base64 et MySQL sont d'accord sur l'encodage des caractères (je recommande UTF-8).
  2. J'ai enveloppé la chaîne à 50 colonnes pour la lisibilité sur SO. Vous pouvez l'enrouler à n'importe quel nombre de colonnes que vous voulez (ou ne pas envelopper du tout) et cela fonctionnera toujours.

Maintenant, pour charger ce dans MySQL:

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

Cela insérera sans aucune plainte, et vous ne pas avoir à manuellement échapper à tout texte contenu dans la chaîne.

1

Vous pouvez utiliser ce code

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

si mysqli_real_escape_string ne fonctionne pas

2

Si vous souhaitez conserver (') apostrophe dans la base de données utiliser ci-dessous le code

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

new_value de $ can stocker dans la base de données.

Questions connexes