Java Posted December 22, 2008 Report Share Posted December 22, 2008 Vai ar MySQL procedūrām ir iespējams, atkarībā no mysql errora atgriezt kaut kādu custom paziņojumu? Respektīvi - vai ir iespējams ar procedūrām db error reportingu veikt, nevis veikt to php galā, piemēram? Link to comment Share on other sites More sharing options...
andrisp Posted December 22, 2008 Report Share Posted December 22, 2008 Pārāk neiedziļinājos, vai var tieši to, ko prasi, bet: http://dev.mysql.com/doc/refman/5.1/en/declare-handler.html Link to comment Share on other sites More sharing options...
Java Posted December 22, 2008 Author Report Share Posted December 22, 2008 andrisp - īsiem vārdiem sakot - es gribu MySQL galā ar procedūru un trigeru palīdzību izdarīt visu iespējamo, lai man pēc iespējas mazāk darba paliek php galā. Fiška tāda, ka piemēram, iesniedzot formu - es nočekoju ar javascript vērtības, bet pēc tam jau tās n-tās pārbaudes veicu nevis php, bet MySQL un atgriežu atpakaļ ar php - php tikai kā starpnieks, kurš tīri no datubāzes paņem datus kā array vai string un attēlo un viss - pats ar to nedarbojas! :P Saprati domu? Link to comment Share on other sites More sharing options...
andrisp Posted December 22, 2008 Report Share Posted December 22, 2008 Nu tad ko tad tev īsti vajag - lai procedūra atgrieztu atpakaļ kaut kādu tavu custom definētu kļūdas paziņojumu mysql kļūdas (mysql ģenerētās kļūdas/paziņojumi) gadījumā vai arī custom paziņojumu, piemēram, ja tur strings par īsu utt (tipa datu validācija) ? Ja pirmais, tad tas links, ja otrais, tad vienkārši IF + select 'kljuudas pazinjojums'. Link to comment Share on other sites More sharing options...
Java Posted December 22, 2008 Author Report Share Posted December 22, 2008 (edited) Doma ir apmēram tāda: $request_param = parametru_apstrade_pofig_kas($_REQUEST['my_param']); $res = mysql_query("CALL procedure1("+$request_param+");"); // esmu ieguvis rezultātu array formā - pat ja tas ir errors - izvadu uz ekrānu saprotamā formā Doma tāda, ka man nav vajadzīgas praktiski nekādas php db klases. Vienkārši - vajag projektā vienkāršot pēc iespējas server puses skriptu darbības ar datubāzi: 1) pārbaudam request parametrus (vai ir valīdi vienkārši); 2) maucam tos iekšā vienā querijā, kurš vienkārši izsauc procedūru; 3) procedūra izdara visu ko vajag un atgriež vai nu array ar visiem datiem, ko loopot pēc tam caur php vai arī erroru saprotamā valodā, ko var pa taisno izvadīt uz ekrāna Pieņemsim, procedūra Generate_Menus - lai man nav jāveic n-tās pārbaudes vai tur jau tāds unikālais neims ir, mysql atgriezīs erroru, es gribu, lai šis errors izvadās nevis mysql formā - tas var sniegt par daudz informācijas nevēlamām personām, bet vienkārši - "Neimam jābūt unikālam, šāds neims jau ir", nevis "Unique constraint violated in query ...." ļaļaļa. Un es gribu, lai to dara procedūras jau iekš mysql, lai tas MySQL pats veic savu erroru apstrādi, nevis uztic to php! :P Ideja tāda vēl arī, ka, piemēram, ģenerējot to menu, es visus nepieciešamos ciklus un atlases veicu jau procedūra un atgūstu galarezultātu un to iedodu php kā array - php nezin nemaz, kas tai array ir iekšā, bet zin, ka viss ir korekti atlasījies un veic pāris rindiņas garu foreach, lai to visu atrādītu uz ekrāna ;) P.S. Daudzie MySQL errori var atgriezties, jo ir tāda fiška, ka esmu salicis smuki visus FK, UNIQUE, Indexus, sasaistījis visu tik smuki kopā, ka greizas variācijas nemaz nevar ievietot ;) Attiecīgi - gribu, lai arī visas tās pārbaudes un errorus user friendly formā atgriež pats MySQL, jo kāda velna pēc php jāķidā MySQL errori ;) Saprati? Edited December 22, 2008 by Java Link to comment Share on other sites More sharing options...
Grey_Wolf Posted December 22, 2008 Report Share Posted December 22, 2008 Pieņemsim, procedūra Generate_Menus - lai man nav jāveic n-tās pārbaudes vai tur jau tāds unikālais neims ir, mysql atgriezīs erroru, es gribu, lai šis errors izvadās nevis mysql formā - tas var sniegt par daudz informācijas nevēlamām personām, bet vienkārši - "Neimam jābūt unikālam, šāds neims jau ir", nevis "Unique constraint violated in query ...." njaa ... runat jau maki labi, bet kad jadara ... Mysql kaa lielakaa dalja no serverveidigajiem var atgriest ne tikai gatavu kljudas pazinjojumu, bet arii kljuudas Numuru ... Un cerams ka masiivus PHP galaa maki lietot?? tas ir viens.. Otrs ir tas ka laikam jauc SQL ir Datu 'bazes valoda' nevis Programesanas valoda kaa taada... Un Mysql Nav nedz interpretators nedz kompilators.. Link to comment Share on other sites More sharing options...
andrisp Posted December 22, 2008 Report Share Posted December 22, 2008 Java, un ko tieši nevari dabūt gatavu ar tām divām metodēm, ko 2. un 4. postā teicu ? Link to comment Share on other sites More sharing options...
Java Posted December 22, 2008 Author Report Share Posted December 22, 2008 Grey Wolf - ok, kļūdas numurs - ja tas sniedz visu ko vajag zināt - ok, tad php izņemu no masīva un parādu kļūdu... Tev nav taisnība - arī datubāzes procedūru rakstīšana ir programmēšana. Praktisks piemērs: Man mājās ir teiksim, 20 zaļas paciņas ar ābolu, 10 sarkanas paciņas ar ābolu sulu un 30 oranžas paciņas ar apelsīnu sulu. Man ir jāiznes no mājas uz busiņu 5 zaļas paciņas, 3 sarkanas un 15 oranžas un jāiznes 3 litru burkā vēl sajauktas zaļo paciņu saturs ar sarkano attiecībā 1:2. Pieņemsim, mana māja ir datubāze - bet busiņš - rezultāts, ko attēlot klientam. Vai iznest sākumā 20 zaļās un pārliecināties busiņā, ka trūkst vēl 3 sarkanās, tad nest 3 sarkanās un pārliecināties, ka vēl nav oranžās un burka, vai arī to visu izdarīt mājās - sašķirot paciņas un sajaukt burkā to ļergu un visu iznest vienā kastē uz busiņu? Tā ir atšķirība starp php un datubāzes mijiedarbību pretstatā procedurālām darbībām jau pa taisno datubāzē. Errors būtu, ja izrādās, ka man mājās ir tikai 2 sarkanās kandžas, kaut arī jāiznes 3. Link to comment Share on other sites More sharing options...
Grey_Wolf Posted December 22, 2008 Report Share Posted December 22, 2008 Java --> tu pats vispar savus postus parlasi arii?? skaidri un gaishi uzrakstiji [cit]es gribu MySQL galā ar procedūru un trigeru palīdzību izdarīt visu iespējamo, lai man pēc iespējas mazāk darba paliek php galā. Fiška tāda, ka piemēram, iesniedzot formu - es nočekoju ar javascript vērtības, bet pēc tam jau tās n-tās pārbaudes veicu nevis php, bet MySQL un atgriežu atpakaļ ar php - php tikai kā starpnieks, kurš tīri no datubāzes paņem datus kā array vai string un attēlo un viss - pats ar to nedarbojas! [/cit] tas ir veikt datu validaciju, utt.. tas ir pilniibaa visu uzvelt SQl pleciem ... Tapec arii teicu vai tik kautko nesi sajaucis ... Link to comment Share on other sites More sharing options...
Java Posted December 22, 2008 Author Report Share Posted December 22, 2008 (edited) Grey_Wolf - vēlreiz: 1) klienta gals - useris iesniedz datus - daļu datu pārbaudi (formās, piemēram) veicu ar javascript palīdzību (tikai un vienīgi, lai uzlabotu usability), sūtu uz servera; 2) neuzticos nevienam klienta vārdam (atsūtītajam datam), caur php pārbaudi vai vērtības ir valīdas - tik daudz valīdas, lai varētu sūtīt uz MySQL (nevis veikt selectu, vai, piemēram, šāds ieraksts eksistē) 3) sūtu MySQL procedūrai attiecīgos parametrus; 4) MySQL procedūra veic datu apstrādi - selecto utt. Secina, ka nav datu vai ir constrainta pārkāpums - nu jebkas, kas var atgadīties pat BIEŽI! Vai arī nav errors. Abos gadījumos, procedūra atgriež masīvu. 5) php uzdevums ir viens - atpazīt, vai rezultāts ir errora msg vai arī valīds rezultāts. Atkarībā no šī, atrādīt to savā veidā un aizsūtīt atpakaļ klientam. Ir skaidrība tagad, ko es domāju? Klienta gals (pārbaude, vai jūzeris nesniedz aplamus datus, piem, e-pasta vietā "asdf") -> PHP gals (pārbauda vai jūzera atsūtītos datus DRĪKST padot datubāzei) -> MySQL gals - datu apstrāde un rezultāta atgriešana (pat ja errors, tiek atgriezts errora rezultāts) -> PHP gals - nosakām atgrieztā datu tipa - errors vai vēlamais rezultāts - atkarībā no tā vienkārši tos apstrādājam, neveicot nekādus papildu pieprasījumus MySQL un nosūtam klientam, viņam pieņemamā formā -> atkal Klienta gals - saņēmis rezultātu ir vai nu priecīgs un lec pa gaisu vai arī sarūgtināts un raud spilvenā. Edited December 22, 2008 by Java Link to comment Share on other sites More sharing options...
bubu Posted December 22, 2008 Report Share Posted December 22, 2008 Tu tak teici, ka ar MySQL validēsi, nevis ar php: Fiška tāda, ka piemēram, iesniedzot formu - es nočekoju ar javascript vērtības, bet pēc tam jau tās n-tās pārbaudes veicu nevis php, bet MySQL un atgriežu atpakaļ ar php ... (#3 postiņā) Link to comment Share on other sites More sharing options...
Aleksejs Posted December 22, 2008 Report Share Posted December 22, 2008 Java, šķiet - šajā diskusijā tiek iztirzāts tieši tas (vai gana līdzīgs "tas"), ko gribi Tu: http://forums.mysql.com/read.php?99,55108,55108#msg-55108 Link to comment Share on other sites More sharing options...
v3rb0 Posted December 22, 2008 Report Share Posted December 22, 2008 Java, a ieguvums kāds, kāpēc tā darīt gribi? Link to comment Share on other sites More sharing options...
Java Posted December 22, 2008 Author Report Share Posted December 22, 2008 (edited) v3rb0 - ieguvums tāds - ja man skripts ir jāparraksta citā valodā (piemēram, asp, python, jsp...), tad man nepieciešamas krietni mazāk modifikācijas, visas db lietas darbosies vienkārši un šabloniski. Bet ja jāveic migrācija uz citu datubāzes serveri vai jaunu datubāzes struktūru - jāpārraksta jebkurā gadījumā gandrīz visa datubāze, atšķirība tik tā, ka pēc šīs metodes, ko aprakstīja, nebūs arī tik smagi jāpārraksta skripts (iespējams, vispār nebūs jāpārraksta, izņemot konfig vērtību maiņu) ;) Noteikti, Gints Plivna, piemēram, no šejienes zin, ka datubāzes migrācija ir kārtīgs darbelis (ja db ir pietiekami nopietna) - bez maz atsevišķs projekts, par ko maksā kaudzēm naudas. Neieteiktu nekad tādu uzticēt iesācējam puņķutapai, jo, ja db migrācijas procesā pieļauj kļūdas jau sākumā, pēc tam ko labot ir grūti un beigās var tā visu nojāt, ka darbs jāveic pa jaunu no nulles. ;) Tā, ka redzu tikai plusus šādai metodei. Edited December 22, 2008 by Java Link to comment Share on other sites More sharing options...
v3rb0 Posted December 22, 2008 Report Share Posted December 22, 2008 (edited) a tiešām vajadzēs, izklausās pēc overenginērošanas, jo Tu pat nezini ko migrēt vajadzēs, db vai scriptus. ja db migrēt vajadzēs, tad taisni tikai plikas tabulas ir tas ko vajag, bet ja gan db gan skriptus migrēt, tad jo vienkāršāk un standartigāk, jo mazāka varbūtība, ka tajā X, uz kur migrēsies nevarēsi pārrakstīt savu loģiku 1:1 bez lielām galvassāpēm. Edited December 22, 2008 by v3rb0 Link to comment Share on other sites More sharing options...
Recommended Posts