[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: mysql_real_escape_string и mysql_query
inpost
Простая функция добавления данных:
function escapeString($data)
{
if(is_array($data))
$data = array_map("escapeString", $data);
else
$data = mysql_real_escape_string($data);

return $data;

}

function errorPay($error)
{
mysqlQuery("INSERT INTO `".IRB_DBPREFIX."pay_info` SET
`post` = '"
.escapeString(print_r($_POST,true))."'
"
);
exit();
}


Данные, которые хранятся на стороне платежной системы: http://my.jetscreenshot.com/7950/20110913-j6tp-2kb (обратите внимание на буквы), скрипт (на стороне клиента) показывает, что отправляет в таком формате: &cust_city=S%E3o%20Paulo& , но эта запись элементарно добавляется в БД.
Сама же запись в БД обрывается после буквы S, то есть видим открытие массива, перечисление идёт до этого символа и обрывание. С другими записями такой проблемы не замечал.

На всякий случай, ячейка `post` является text utf8_unicode_ci



Спустя 26 минут, 20 секунд (13.09.2011 - 04:34) Renden написал(а):
inpost
Я даже хз чем те помочь.. ( Слух а может просто напишешь минифукнцию аналог mysq_real.. ну типа того:


function My_escape($data) {
$data = str_replace("'", "\'", $data);
$data = str_replace('"', '\"', $data);
return $data;
}

Спустя 15 минут (13.09.2011 - 04:49) inpost написал(а):
Renden
Данные, которые отсылаются - там нет кавычек, врядли это может быть в них.
К тому же смоделируй ситуацию, там есть кавычка и она попала в запрос, тогда получится бардак, и функция mysql_query вернёт ошибку, а не запись добавится но криво...

Спустя 5 минут, 7 секунд (13.09.2011 - 04:54) vital написал(а):
utf8_unicode_ci=>utf8_general_ci

и сюда что получится.

Спустя 1 минута, 17 секунд (13.09.2011 - 04:56) Renden написал(а):
inpost
Так а если попробывать без escapeString(); то заносится или нет? Если нет то проблема скорее всего в кодировке, а если да то проблема в функции. Других вариантов тут и нет..

Спустя 18 минут, 52 секунды (13.09.2011 - 05:15) twin написал(а):
А мне другое любопытно. Для чего в базе хранипть пользовательское представление массива? Это лог такой хитрый? Вообще для этих целей обычно юзают сериализацию или JSON

По теме. utf8_unicode_ci поддержвает не все символы UTF-8. Быть может ты на такой и нарвался. Попробуй что vital посоветовал.

Спустя 13 минут, 11 секунд (13.09.2011 - 05:28) vital написал(а):
Цитата (twin @ 13.09.2011 - 02:15)
А мне другое любопытно. Для чего в базе хранипть пользовательское представление массива? Это лог такой хитрый? Вообще для этих целей обычно юзают сериализацию или JSON

По теме. utf8_unicode_ci поддержвает не все символы UTF-8. Быть может ты на такой и нарвался. Попробуй что vital посоветовал.

Те которые не поддерживает - мускул, по идее, должен заменять на похожие аналоги. Но кто знает, попробовать то стоит)

Спустя 18 минут, 23 секунды (13.09.2011 - 05:46) inpost написал(а):
escapeString, print_r убрал. Установил general, тот же результат...

Спустя 2 минуты, 24 секунды (13.09.2011 - 05:49) twin написал(а):
А точно доходит строка до запроса? Распечатывал?

Спустя 2 минуты, 5 секунд (13.09.2011 - 05:51) inpost написал(а):
twin
Да, банально внутренний лог, чтобы красиво можно было смотреть на входящие данные. К тому же это лишь для моего наблюдения существует, остальным доступ к этим данным заблокирован, даже владельцу сайта smile.gif
Сериализация менее красиво смотрится через PMA, да тут даже не в том, что такой вид я заношу в БД изначально, эту таблицу могу в любой момент банально удалить, а в том, что этот символ банально все обрывает.

А как по другому? Сразу получил $_POST['city'], его и занёс в отдельную ячейку, в итоге вместо Sao Paulo там запись лишь "S".

Спустя 3 минуты, 25 секунд (13.09.2011 - 05:54) vital написал(а):
Ну если точно доходит до запроса. Хммм.
show variables like "char%";
Мб там еще везде юникод потыкать, если не стоит?

Спустя 30 секунд (13.09.2011 - 05:55) twin написал(а):
Режет то не S, а следующий - "а" с макушками)))

Попробуй просто его один записать в базу, что будет?

Спустя 29 секунд (13.09.2011 - 05:55) vital написал(а):
Ну как-то же с этим справляются пхп-программисты из саопалоло))

Спустя 6 минут, 23 секунды (13.09.2011 - 06:01) inpost написал(а):
Банально заношу в файл, получаю:
Array\n(\n [cust_phone] => 123456789\n [item1_price] => 250.00\n [cust_city] => Sуo Paulo\n (это фар)... Смотрю через AkelPad: Sгo Paulo,
В БД не заносит вообще, ни general, ни unicode.

Спустя 3 минуты, 36 секунд (13.09.2011 - 06:05) vital написал(а):
Вобщем. Вот что предлагаю.
Заноси в бд хтмлентити(саопауло)
а юзверю соотв-но хтмлентити_декоде(саопалоло).

Спустя 1 минута, 28 секунд (13.09.2011 - 06:06) vital написал(а):
http://nicj.net/2011/04/17/mysql-convertin...-column-to-utf8
вот кстати погуглил. Этот саопалоло много где приводят в пример.
И везде решение - юзать хтмлентити.

Спустя 1 минута, 58 секунд (13.09.2011 - 06:08) inpost написал(а):
Вот что ещё заметил, если я копирую и вставляю в запрос напрямую, то получаю:
SГЈo Paulo, этот вариант заносится нормально в Мускул. А если вставляю на сайт платежки, то он возвращает именно: Sгo Paulo , и уже не хочет заносить...

vital
Особенность в том, что нигде это не выводится, ни в админке, ни в другом месте. Только для удобства храню в Мускуле, чтобы если вдруг баг произойдет какой-нибудь, сразу мог сравнить входящие данные и за пару минут отловить ошибку. Очень удобно, когда работаю с платежными системами... Если даже я сделаю так, то мне придется создать свою собственную страницу вроде PMA, который будет в таком же виде отображать, я провожусь из-за одного города пару дней...

Спустя 1 минута, 15 секунд (13.09.2011 - 06:10) vital написал(а):
str_replace() вот ту фиговину на букву а перед отправкой в бд?

Спустя 7 минут, 12 секунд (13.09.2011 - 06:17) inpost написал(а):
vital
Я бы с удовольствием попробовал бы str_replace, но когда я получаю $_POST['city'], как мне вытащить из него код символа, или в каком виде он там передаётся? Банально если я сохраняю в ФАЙЛ, то получаю: "Sгo Paulo", эту строчку вообще элементарно в БД занести из любого скрипта. Собственно если копирую из гугла São Paulo - тот же эффект, работает отлично...

Спустя 5 минут, 29 секунд (13.09.2011 - 06:22) vital написал(а):
Latin capital letter A with tilde à à à à à Ã
Latin small letter a with tilde ã ã ã ã ã ã

Спустя 51 секунда (13.09.2011 - 06:23) vital написал(а):
хтмлентити ->реплейс ентити код выше-> хтмлентити_декоде

Спустя 10 минут, 48 секунд (13.09.2011 - 06:34) inpost написал(а):
vital
Спасибо. Высплюсь, попробую, отпишусь.


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.