Как вставить значение в MySQL, состоящее из одиночных или двойных кавычек. то есть
This is Ashok Pen.
Единственная кавычка создаст проблемы. Могут быть другие escape-символы.
Как вы правильно вставляете данные?
Как вставить значение в MySQL, состоящее из одиночных или двойных кавычек. то есть
This is Ashok Pen.
Единственная кавычка создаст проблемы. Могут быть другие escape-символы.
Как вы правильно вставляете данные?
Проще говоря:
SELECT 'This is Ashok' Pen.';
Итак, внутри строки замените каждую отдельную цитату двумя из них.
Или:
SELECT 'This is Ashok\ Pen.'
Escape it =)
Смотрите мой ответ на "Как экранировать символы в MySQL"
В любую библиотеку, которую вы используете для общения с MySQL, будет встроена экранирующая функция, например, в PHP вы можете использовать mysqli_real_escape_string или PDO :: quote
'это побег персонаж. Итак, ваша строка должна быть:
Это Ашок Пен
Если вы используете какой-либо интерфейсный код, вам нужно заменить строку перед отправкой данных в хранимую процедуру.
Например, в С# вы можете сделать
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 Pen.";
mysql_real_escape_string($var);
?>
Это решит вашу проблему, потому что база данных не может обнаружить специальные символы строки.
Есть другой способ сделать это, который может быть или не быть более безопасным, в зависимости от вашей точки зрения. Это требует MySQL 5.6 или позже из-за использования определенной строковой функции: FROM_BASE64
.
Допустим, у вас есть это сообщение, которое вы хотите вставить:
"Ах, - почти безголовый Ник махнул изящной рукой, - вопрос неважный... Не то, чтобы я действительно хотел присоединиться... Думаю, я бы подал заявку, но, очевидно, я не выполняю требований '- "
У этой цитаты есть куча single- и двойных кавычек, и было бы очень трудно вставить ее в MySQL. Если вы вставляете это из программы, легко избежать кавычек и т.д. Но, если вам нужно вставить это в сценарий SQL, вам придется отредактировать текст (чтобы избежать кавычек), что может привести к ошибкам. или чувствительны к переносу слов и т.д.
Вместо этого вы можете закодировать в Base64 текст, чтобы у вас была "чистая" строка:
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
Некоторые заметки о Base64-кодировке:
base64
и MySQL согласны с кодировкой символов (я рекомендую UTF-8).Теперь, чтобы загрузить это в MySQL:
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));
Это вставит без каких-либо претензий, и вам не нужно было вручную экранировать текст внутри строки.
Вам следует избегать специальных символов с помощью символа \
.
This is Ashok Pen.
становится:
This is Ashok\ Pen.
В 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 = " 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);
?>
Вы можете использовать этот код,
<?php
$var = "This is Ashok Pen.";
addslashes($var);
?>
если mysqli_real_escape_string() не работает.
Если вы хотите сохранить (') апостроф в базе данных, используйте этот ниже код
$new_value = str_replace("'","\'", $value);
$new_value может храниться в базе данных.
Если вы используете PHP, просто используйте функцию addlashes().
$var = mysqli_real_escape_string($conn, $_POST['varfield']);
Для программного доступа вы можете использовать placeholders, чтобы автоматически избежать небезопасных символов для вас.
В Perl DBI, например, вы можете использовать:
my $string = "This is Ashok pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string));
Может быть, вы могли бы взглянуть на функцию QUOTE
в руководстве MySQL.
Как я делаю, используя Delphi:
TheString для "побега":
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.
Подобные функции есть во всех языках программирования!
Используйте addlahes() или mysql_real_escape_string().