Portál AbcLinuxu, 20. července 2025 11:16


Dotaz: mysql api indikace noveho zaznamu

9.5.2009 14:39 Michal
mysql api indikace noveho zaznamu
Přečteno: 486×
Odpovědět | Admin

zdravim  pouzivam mysql a api pro c/c++ , mám následující dva dotazy:

1. umoznuje mysql dát nějakým zpusobem vědět, že v konkretni tabulce byl přidán nový záznam? vetsinou se to provadi ze se kontroluje obsah po nejakem timeoutu, ale právě tomu timeoutu bych se chtel vyhnout...lze to nějak?

 

2. magic_quotes jsou zalezitosti php nebo mysql ? tj.muzu je nastavovat ikdyz nepouzivam php ?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

poky74 avatar 9.5.2009 19:03 poky74 | skóre: 36 | blog: Zápisník | Vrchlabí
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu
Odpovědět | | Sbalit | Link | Blokovat | Admin
1. zjistit počet řádků před a po vykonání scriptu? 2. http://cz2.php.net/manual-lookup.php?pattern=magic
Chcete Linuxové samolepky nebo Tuxe na klíče? ->
9.5.2009 19:24 Michal
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu

1. mno mozna jsme se nepochopili, ja pisi takoveho maleho daemona, ktery ma v pripade ze se objevi neco v databazi provest nejake definoane akce.....a nechci to resit stylem ze ten daemon bude kazdych 30s posilat "SELECT....", ale rad bych kdyby slo nejakym zpusobem osetrit aby ta database dala sama vedet ze pribyl novy zaznam......nejaky signal/preruseni nebo neco...

2. ten link jsem nejak nepobral....

xkucf03 avatar 9.5.2009 19:37 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu
Odpovědět | | Sbalit | Link | Blokovat | Admin
  1. Tohle je obecně dost problém, dostat z DB nějaké události do aplikace. Asi nejspolehlivější je posílat všechna data přes aplikaci (aby se k DB nepřistupovalo jinudy) a pak si ta aplikace hlídá, co se změnilo/přibylo. Nebo si můžeš hlídat v pravidelných intervalech sekvenci, když stoupne její aktuální hodnota, jdeš hledat řádky, které přibyly. Nebo můžeš rovnou sledovat obsah tabulky, ale to je výkonově hodně náročné. Trochu úspornější bude hlídat nejvyšší PK (pokud je číselný a pořád roste). Nebo můžeš mít trigger a uloženou proceduru, která událost předá někam do fronty (MQ) a odtamtud si ji vybere aplikace… ale tohle už je asi nad možnosti MySQL
  2. Co myslíš? :-) magic_quotes je bezpečnostní řešení PHP. A je to řešení velice špatné. Escapuje vstup od uživatele (Get / Post / Cookie) a předpokládá, že kodér je blb a poslepuje např "SELECT * FROM tabulka WHERE id = " . $_GET['id'] . " AND …". Ten vstup od uživatele se escapuje předem, bez ohledu na to, kde ho použiješ – když si ho vypíšeš na stránku, bude taky escapovaný… prostě je to špatný přístup. Řešením je neslepovat SQL z kousků textu, ale připravit si parametrizované dotazy/příkazy a parametry tam dosazovat (bindovat).
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
AraxoN avatar 9.5.2009 21:02 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu
Odpovědět | | Sbalit | Link | Blokovat | Admin

1. dá sa to cez MySQL trigger - normálne si nakódiš (napr. v C/C++) funkciu, tú skompiluješ do .dll (alebo v linuxe do .so), nahráš ju medzi knižnice na MySQL serveri a v MySQL potom zadefinuješ trigger že pri vložení riadku sa má zavolať taká funkcia z tej dll-ky. Čo tá funkcia bude presne robiť, to už je len na Tebe - môže otvoriť rúru, socket, súbor, alebo aj ďalšie databázove spojenie na celkom inú databázu, niečo tam zapísať, poslať signál nejakému procesu, odblokovať semafor, poslať mail - čokoľvek.

2. jediné o čo by som sa zaujímal v súvislosti s magic_quotes je to, ako ich vypnúť.

xkucf03 avatar 9.5.2009 21:43 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše magic_quotes
jediné o čo by som sa zaujímal v súvislosti s magic_quotes je to, ako ich vypnúť.

+1 :-)

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
10.5.2009 12:46 Michal
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu

1. genialni napad, presne neco takoveho potrebuji, sice to bude trosku pracnejsi nez bych si pral, ale co uz....kdyby jste měl nejakou primitivni funkci  jiz hotovou a nevadilo by vam ji sem vlozit byl bych vdecny...nikdy jsem s tim nedelal tak jen pro predstavu co je treba vsechno nadefinovat...

2. mno vzdyt o to mi taky jde.....jenze vetsinou se magic_quotes vypinaji v php.ini coz me privedlo na myslenku ze asi to nema nic spolecneho s mysqld

AraxoN avatar 10.5.2009 15:44 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu
Příloha:

Bohužiaľ, pre MySQL som ešte vlastné funkcie nevytváral. Podľa manuálu by to malo byť možné a verím, že s trochou hľadania, čítania a experimentovania sa to podarí. Takou istou metódou (manuál+skúšanie) som dorábal jednu funkciu do PostreSQL - ale to je úplne iné API a asi Ti to moc nepomôže.

V prílohe je moja vlastná funkcia pre Postgres. Nie je to síce priamo funkcia pre trigger, ale ako demo snaď stačí. Z UTF-8 reťazca oseká diakritiku - potreboval som to na fulltextové hľadanie, aby to niečo našlo aj lenivcom, ktorí nepíšu "hacky carky".

11.5.2009 11:12 Michal
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu

ok diky, vyzkousim, prozkoumam....

12.5.2009 15:31 podlesh | skóre: 38 | Freiburg im Breisgau
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu
Ovšem zrovna v postgresu takováto funkce není potřeba, protože postgres asynchronní události má (nebo alespoň měl před deseti lety, nevím zda to od té doby není deprecated).
14.5.2009 14:44 Michal
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu

mno tak jsem to zkousel, konkretne s tim posilanim signalu jinemu procesu, jenze funkce kill mi vraci chybu EPERM tudiz predpokladam ze jsem narazil na to ze funkce bezi pod uzivateleme "mysql" kdezto aplikace ktera ma signal prijmout pod uzivatelem "michal"...........nejaky hezky a jednoduchy napad jak to osetrit???

xkucf03 avatar 14.5.2009 15:25 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu

Co třeba fronta? U nich se dají nastavovat práva jako u souborů, takže bys povolil uživateli mysql zápis do fronty a michal by z ní četl.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
14.5.2009 17:57 Michal
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu

a jde ta fronta otevrit tak, aby v pripade zapisu byla neblokujici a v pripade cteni byla blokujici ???

 

15.5.2009 02:43 Michal
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu

tak jsem si s tou frontou chvilku hral a mam dalsi dotaz. Jestlize chci aby z te fronty mohl cist POUZE uzivatel michal tak predpokladam ze ji musi zalozit on a nastavit prava zapisu pro skupinu a ostatni, jenze at se snazim jak chci tak funkce mq_open me ty prava ignoruje

mq_open(FRONTA, O_RDONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IWGRP | S_IWOTH , &mqAtr);

a vysledek:

-rw------- 1 michal michal 80 2009-05-15 02:23 robot

 

opacny pripad kdy by frontu zalozil mysql se mi nezda nejlepsi pac by musel nastavit prava tak aby z ni mohl cist kdokoliv(coz je nezadouci) jestli se nepletu...

 

AraxoN avatar 14.5.2009 15:31 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu

Neskúšal som, ale keby som sa do toho mal pustiť tak asi skúsim pomenované rúry - man fifo

Alebo keby som bol veľmi lenivý, tak aplikáciu čo má signál prijať by som cez sudo spustil tiež ako user mysql. :-)

14.5.2009 17:59 Michal
Rozbalit Rozbalit vše Re: mysql api indikace noveho zaznamu

mno tak sel by nastavit SUID ale v ramci bezpecnosti se mi to moc nelibi....

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.