Topic: mysql uzklausa

Sveiki parasau tokia uzklausa:
"UPDATE lentele SET menu='$kinatamasis' where idis=$kintamasis1 and id=$kinatmasis2"

$kintamasis yra paimamas is <textarea> lauko, jei ten ivedu paprasta teksta, viska buna gerai, bet jei tik tekste ivedu pvz.: belenkas's
tada gaunu klaida
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's protection ' at line 1

gal kas galit patart, kaip to isvengti?

Re: mysql uzklausa

Pagal tavo pvz gaunasi taip:

UPDATE lentele SET menu='belenkas's' where idis=$kintamasis1 and id=$kinatmasis2

Klaida tame, kad MySQL'as mato neteisingai sudėliotas viengubas kabutes, kurios apibrėžia eilutės tipo reikšmę. Kad to išvengti turi reikšmės viduje esančias kabutes esceipinti (escape - išvengti) - prirašyti backslaš'ą (blackslash - "\").

Užklausa atrodytu taip:

UPDATE lentele SET menu='belenkas\'s' where idis=$kintamasis1 and id=$kinatmasis2

Tą gali atlikti su PHP funkcija addlashes() arba naudodamasis mysql funkcijomis: mysql_escape_string() arba mysqli_real_escape_string().

Re: mysql uzklausa

mysql_query("UPDATE lentele SET menu='$kintamasis' WHERE idis='$kintamasis1' AND id='$kintamasis2'") or die(mysql_error());

Re: mysql uzklausa

? :]

5 (edited by Dratas 2006-08-25 17:26:39)

Re: mysql uzklausa

na gal taip ir issprendziama problema su prasytom funkcijom, bet tada i uzrasa pridedamas /, belenkoks/'s, bet tarkim darant kokius nors komentarus, tai kaip atrodys uzrasas su /.
su mysql insert funkcija issiprendziau problema, paprasicuausiai parasiau
mysql_query("INSERT INTO komentarai (kom) VALUES (\"$komentaras\") ");
tas pats su update neveikia, gal dar pasiulymu?

Re: mysql uzklausa

Xero tokia uzklausa mes klaida

Re: mysql uzklausa

Dratas, tu problemos neišsprendei, nes dabar bus klaida jeigu žodyje bus dvigubos kabutės (").

Tiek PHP tiek MySQL'e tiek visose kitose kalbose eilutės (strings) yra žymimos kažkokais tai simboliais, dažniausiai kabutėmis. Norint pačią kabutę įrašyt į tą eilutę reikia jos išvengti (escape), kas dažniausiai daroma prieš kabutes padedant atgalini slašą (backslash - \).

Jeigu būtum bent minimaliai paskaitęs pirmą linką, kurį daviau, butum radęs kaip tokį esceipint'ą tekstą rodyti puslapyje (t.y. kaip tuos backslašus panaikinti).

;)

Re: mysql uzklausa

man klaidos nemeta

Re: mysql uzklausa

Nes tikriausiai kintamojo reikšmėje nebuvo kabučių.

10 (edited by Dratas 2006-08-26 00:26:43)

Re: mysql uzklausa

minde wrote:

Dratas, tu problemos neišsprendei, nes dabar bus klaida jeigu žodyje bus dvigubos kabutės (").

Tiek PHP tiek MySQL'e tiek visose kitose kalbose eilutės (strings) yra žymimos kažkokais tai simboliais, dažniausiai kabutėmis. Norint pačią kabutę įrašyt į tą eilutę reikia jos išvengti (escape), kas dažniausiai daroma prieš kabutes padedant atgalini slašą (backslash - \).

Jeigu būtum bent minimaliai paskaitęs pirmą linką, kurį daviau, butum radęs kaip tokį esceipint'ą tekstą rodyti puslapyje (t.y. kaip tuos backslašus panaikinti).

;)

del update sutinku, kad kol kas nieko gero nepadariau, bet del insert, nei su ' kabute, nei su " klaidos nemeta.

Nors dabar paskaiciau ir pabandziau normaliai, tai nieko net nereikia ismetinet is teksto, kuris traukiamas is db :) aciu uz patarimus

Re: mysql uzklausa

Prie tam tikrų salygu klaidos gali ir nemesti, bet bendru atveju reikėtų išvengti visų kabučių ir tam tikrų kitų simbolių (pvz.: ">" ir "<").

12 (edited by sliekas_kanibalas 2006-10-13 01:35:38)

Re: mysql uzklausa

o tai ne geriau būtų htmlspecialchar'inti visko? tada viengubą kabutę pavers html kodu ( http://www.lookuptables.com/ ) , ir tada baigias parkės. ir brauseriai rodys normaliai, ir nemes jokių errorų.

Re: mysql uzklausa

Tai matai, Slieke, kartais tos kabutės reikalingos kaip tikros kabutės, kurios paskui kažkaip bus naudojamos pagal paskirtį. ;)

Re: mysql uzklausa

minde wrote:

Tai matai, Slieke, kartais tos kabutės reikalingos kaip tikros kabutės, kurios paskui kažkaip bus naudojamos pagal paskirtį. ;)

tai pagal idėją tų kabučių (kaip tikrų kabučių) viduje neturėtų būti, o jei reikia kažką su kabutėmis daryti, tai galima juk tą patį daryti ir su html'iniu kodu - vistiek tą patį gaunam :) nebent aš kažko nesuprantu - gal gali kokį pavyzdį duoti? :]

Re: mysql uzklausa

Tarkim reikia suskaičiuoti, kiek tekste simbolių.

Kabutes esceipinti juk nėr jokių bėdų, ir duombazėje jos tegul ir guli kaip kabutės, o ne kaip kažkas kitą. Jeigu Duomenys bus reikalingi tik rodyti HTML'e tai tada sunku, kad galima tam tikrus simbolius, tarp kurių yra ir kabutės, konertuoti į specialius HTML kodus.

Re: mysql uzklausa

minde wrote:

Tarkim reikia suskaičiuoti, kiek tekste simbolių.

Kabutes esceipinti juk nėr jokių bėdų, ir duombazėje jos tegul ir guli kaip kabutės, o ne kaip kažkas kitą. Jeigu Duomenys bus reikalingi tik rodyti HTML'e tai tada sunku, kad galima tam tikrus simbolius, tarp kurių yra ir kabutės, konertuoti į specialius HTML kodus.

dėl simbolių skaičiavimo sutinku. TEORIšKAI būtų galima pasidaryt tarpinį repleisą, po kurio galima būtų skaičiuot simbolius, bet čia jau sprendimas per aplinkui. bet šiaip tai praktikoj dar nebuvau susidūręs su tokiu poreikiu skaičiuoti simbolius - dažniausiai jei reikia, php'o dalyje tai padarau...