Вопрос

Как мне вставить значение в MySQL, состоящее из одинарных или двойных кавычек.т.е.

This is Ashok's Pen.

Одинарная кавычка создаст проблемы.Там могут быть и другие экранирующие символы.

Как вы правильно вставляете данные?

Это было полезно?

Решение

Проще говоря:

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

Итак, внутри строки замените каждую одинарную кавычку двумя из них.

Или:

SELECT 'This is Ashok\'s Pen.'

Избежать этого =)

Другие советы

Смотрите мой ответ на "Как экранировать символы в MySQL"

Любая библиотека, которую вы используете для взаимодействия с MySQL, будет иметь встроенную экранирующую функцию, напримерв PHP вы могли бы использовать mysqli_real_escape_string mysqli_real_escape_string или PDO::цитата

' является символом escape.Таким образом, ваша строка должна быть:

Это ручка Ашока

Если вы используете какой-либо интерфейсный код, вам необходимо выполнить замену строки перед отправкой данных в хранимую процедуру.

Например, в C # вы можете сделать

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

а затем передайте значение хранимой процедуре.

Если вы используете подготовленные инструкции, драйвер обработает любое экранирование.Например (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();

Используйте этот код:

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

    mysql_real_escape_string($var);
?>

Это решит вашу проблему, поскольку база данных не может обнаружить специальные символы строки.

Есть другой способ сделать это, который может быть или не быть более безопасным, в зависимости от вашей точки зрения.Для этого требуется MySQL 5.6 или более поздней версии из-за использования определенной строковой функции: FROM_BASE64.

Допустим, у вас есть это сообщение, которое вы хотели бы вставить:

"А, - Почти Безголовый Ник изящно махнул рукой, - это не имеет значения....Не то чтобы я действительно хотел присоединиться....Думал, что подам заявку, но, видимо, я "не соответствую требованиям" ...

Эта цитата состоит из множества одинарных и двойных кавычек, и вставить ее в MySQL было бы настоящей проблемой.Если вы вставляете это из программы, то легко избежать кавычек и т.д.Но, если вам нужно поместить это в SQL-скрипт, вам придется отредактировать текст (чтобы избежать кавычек), который может быть подвержен ошибкам или чувствителен к переносу слов и т.д.

Вместо этого вы можете закодировать текст в Base64, чтобы у вас была "чистая" строка:

JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K

Несколько замечаний о кодировке Base64:

  1. Base64-кодировка - это двоичное кодирование, поэтому вам лучше убедиться, что вы правильно набрали набор символов при выполнении кодировки, потому что MySQL собирается декодировать строку в кодировке Base64 в байты, а затем интерпретировать их.Будьте уверены base64 и MySQL согласны с тем, какова кодировка символов (я рекомендую UTF-8).
  2. Я сократил строку до 50 столбцов для удобства чтения при переполнении стека.Вы можете обернуть его в любое количество столбцов, какое захотите (или не переносить вообще), и он все равно будет работать.

Теперь, чтобы загрузить это в MySQL:

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

Это позволит вставить без каких-либо жалоб, и вам не пришлось вручную экранировать любой текст внутри строки.

Вы должны экранировать специальные символы, используя \ характер.

This is Ashok's Pen.

Становится:

This is Ashok\'s Pen.

Если вы хотите сохранить апостроф (') в базе данных, используйте приведенный ниже код

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

$new_value может храниться в базе данных.

Вы можете использовать этот код,

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

если mysqli_real_escape_string() не работает.

В PHP используйте mysqli_real_escape_string..

Пример из руководства по 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']);

Если вы используете PHP, просто используйте функцию addslashes().

Добавление косых черт вручную в PHP

Для программного доступа вы можете использовать заполнители чтобы автоматически избегать небезопасных для вас символов.

Например, в Perl DBI вы можете использовать:

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

Используйте либо addslahes(), либо mysql_real_escape_string().

То, как я это делаю, используя Delphi:

Привязка к "побегу":

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

Решение:

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

Результат:

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

Эта функция заменит все символы Char(39) на "\'", что позволит вам вставлять или обновлять текстовые поля в MySQL без каких-либо проблем.

Подобные функции есть во всех языках программирования!

Может быть, вы могли бы взглянуть на функцию QUOTE в руководстве по MySQL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top