Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> спецсимволы в значениях полей, экранирование ' и "
golovolom  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 54
Пользователь №: 28574
На форуме: 5 лет, 10 месяцев, 24 дня
Карма: 1




Не получается найти решение проблеме.
Собственно дело вот в чём. Нужно сделать запрос на добавление записи в таблицу. Делается это у меня примерно так:

$value1="значение1";
$value2="значение2";
$q="INSERT INTO table_name (val1,val2) values ($value1, $value2)";
$mysqli->query($q);


До поры до времени всё шло нормально, пока в значениях "значение1" и "значение2" не начали появляться символы ' " и ,
В итоге весь запрос ломается. Например, если $value1="Vladimir Krasnopol'skii, Valerii Uskov"; то строка запроса будет выглядеть так:
INSERT INTO table_name (val1,val2) values (Vladimir Krasnopol'skii, Valerii Uskov, значение2)
Тут в запрос вкрапляется запятая, которая на самом деле входит в значение поля.
Если обрамлять апострофами, то опять же запрос ломается из-за присутствующих в значении '. То же и с кавычками. Существуют ли какие-то функции, с помощью которых можно экранировать все эти символы, чтобы они не участвовали в запросе?
Пробовал так:
$value1=htmlspecialchars("значение1"); //не трогает ни кавычки не запятые
$value1=urlencode("значение1"); //работать то работает, но все значения жесть как коверкает






Спустя 26 минут, 22 секунды (24.01.2012 - 23:33) golovolom написал(а):
Цитата (Winston @ 24.01.2012 - 20:11)
golovolom
Твой запрос - ппц!
Вот как правильно добавлять

Я так и делаю, это в премере я переменные сразу в запрос вписал без сложения строк. Тем более корректно хавает и берёт именно значения а не имена переменных. Это я знаю что такой запрос ппц. Просто у меня не 2 поля а около 10ти добавляется и строчка запроса страшно выглядит в такой форме, я пока что укоротил для удобства. Но дело не в этом
Сейчас попробую с mysql_real_escape_string

Спустя 4 минуты, 49 секунд (24.01.2012 - 23:38) Winston написал(а):
Упс, сразу не заметил, что у тебя mysqli
Попробуй так переписать

$value2="значение2";
$q="INSERT INTO `table_name` (`val1`, `val2`) VALUES ('" . $mysqli->real_escape_string($value1) . "', '" . $mysqli->real_escape_string($value2) . "')";
$mysqli->query($q);




Спустя 3 минуты, 1 секунда Winston написал(а):
Цитата (golovolom @ 24.01.2012 - 22:33)
2 поля а около 10ти добавляется и строчка запроса страшно выглядит в такой форме, я пока что укоротял для удобства. Но дело не в этом

Для этого нужно форматировать запрос фот так
Свернутый текст
$value1="значение1";
$value2="значение2";
$q=" INSERT INTO `table_name` (`val1`, `val2`)
VALUES ( '"
. $mysqli->real_escape_string($value1) . "',
'"
. $mysqli->real_escape_string($value2) . "',
'"
. $mysqli->real_escape_string($value3) . "',
'"
. $mysqli->real_escape_string($value4) . "',
...........
)"
;

$mysqli->query($q);

Спустя 6 минут, 51 секунда (24.01.2012 - 23:45) golovolom написал(а):
Спасиб большое, $mysqli->real_escape_string пашет)

Спустя 3 дня, 9 часов, 18 минут, 43 секунды (28.01.2012 - 09:04) golovolom написал(а):
Опять проблемка.. почему-то не проходят запросы с минусами.
Например:

В поле field таблицы содержится значение 'Я - минус. да я минус'.

делаем такой запрос:

$val = "Я -";
$new_val = "Ты -";
$q = "UPDATE table SET `field` = REPLACE( `field`,
'"
.$msqli->real_escape_string($val)."',
'"
.$msqli->real_escape_string($new_val)."')";
$mysqli->query($q);


В итоге всё проходит нормально. Получаем новое значение поля field 'Ты - минус. да я минус', и запрос выглядел вот так
UPDATE table SET `field` = REPLACE( `field`, 'Я -', 'Ты -')


Но если значение $val равно "Я - минус", то запрос почему-то не проходит, видимо минус тут как арифметическое действие воспринимается, а real_escape_string его не трогает. Не могу понять что в таком случае делать. Пробовал $val = addCslashes($val, "-"); после real_escape_string, получается 3 слэша перед минусом если вывести запрос на экран. Как заэкранировать все знаки, которые могут как-то повлиять на корректность запроса?
В частности, чтобы проходили запросы вида
UPDATE table SET field2 = 'Сам ты - минус' WHERE `field` LIKE '%Я - минус%'


--------------------
Я не помню, как пьяный вчера это писал
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса