Относно mysql_real_escape_string |
||
Публикувано от bourev на: 10.08.2008 16:50 |
||
|
Привет.
Досега винаги съм използвал addslashes, но тъй като повечето отзиви са в полза на mysql_real_escape_string, реших да го използвам в един проект. Питането ми е следното - как точмно действа тази функция и добавя ли реално в базата наклонени черти пред " ? Защото като пусна някой стринг през mysql_real_escape_string и му дам да ми го визуализира в браузъра преди записа в базата данни , е с наклонени черти. А после в базата данни те липсват? И ако добавя черти - с коя функция да се трият при четене от базата? Предварително благодаря на всички |
||
Публикувано от po_taka на: 10.08.2008 19:33 |
||
|
mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.
stripslashes премахва чертите |
||
|
---------------------------
http://www.tekstove.info/ дайте някви идеи кво да го права тва нещо |
||
Публикувано от bourev на: 10.08.2008 23:05 |
||
|
Ясно, но проблема при мен е, че в базата данни наклонената черта липсва пред тези символи. А в браузъра ми дава, че функцията ги поставя.
Някакви идеи? Благодаря |
||
Публикувано от po_taka на: 10.08.2008 23:34 |
||
|
Чертите се добавят , за да се предотврати SQL инжексия,
а в базата се записват без черти. Като в ехо-то echo"123\"456"; , да добавяш специални символи. Ще ти отговора , като цитирам 2 поста от булфорум name='tedy' date='Jun 30 2008, 22:04' post='1495162992' Като начало Винаги ънескейпвай входящите параметри от $_POST/$_GET. А дали да го направиш това се проверява с get_magic_quotes_gpc(). Това е една адски тъпа опция на php.ini, която много дразни. Защо по дяволите за всеки реяукест енджина трябва да предполага, че ще искам да вкарвам в БД, при това с addslashes() ?! Че и на доста хостове е включено тва. Понеже по default ПХП е настроен (май последните версии не беше така..) автоматично да изпълнява addslashes() върху входните данни. И ти с mysql_real_escape_string() му правиш допълнителен ескейпинг. Познай на 3 наклонени черти двойното ескейпване до колко черти води в крайна сметка :) . Още в началото ако get_magic_quotes_gpc() върне Труе, тогава правиш stripslashes() на $_POST променливата. После я мъсялреалесцапестринг-ваш и т.н. CODE
Така получавам 'неопетнен' параметъра и нататък нормално си го escape-вам (ако ще влиза в БД). name='karaman' date='Jul 1 2008, 08:22' post='1495163054' не си разбрал правилно, ти правиш strip_slashes на изхода от mysql, а не трябва. При включен magic GPC (Get/Post/Cookie) strip_slashes се прави на входа на PHP скрипта, а после се прави mysql_real_escape_string на данните, които записвате в SQL |
||
|
Това мнение е редактирано от po_taka на 10.08.2008 23:36 --------------------------- http://www.tekstove.info/ дайте някви идеи кво да го права тва нещо |
||
Публикувано от bourev на: 11.08.2008 00:09 |
||
|
Най-напред - благодаря ти за отговорите.
всъщност, използвам следната функция, която чисти добавените черти при включена get_magic_quotes_gpc(): CODE
Значи да те разбирам, че това е разликата между двете функции - mysql_real_escape_string добавя черти за да предпази от SQL инжексия, а в базата си записва нормален стринг - т.е. без черти. И следователно като чете от базата данни - не е необходимо да се стрипслашва? Още веднъж много ти благодаря :) |