Jump to content
php.lv forumi

Gribu iemacities.


Pingwiins

Recommended Posts

Visiem labdien :)

 

Man ir pilni 14 gadi. Es gribu iemacities php. Maku stradat ar mysql datubazem, esmu ljoti speigs :) Pabeidzu html/css kursus "progmeistera" uz 10. Apnika jau weidot tikai dizajnus, gribas jauno limeni.

 

Te gribeju uzzinat kur sniedz kvalitativos kursus ar njuansiem. Cena nau nozimiga, valoda ari, bet labak butu ja krieviski :)

 

Liels paldies.

Link to comment
Share on other sites

Sveiks!

 

Prieks, ka ir apņēmība. Cik pats zinu, "Progmeistars" ir pats labākais (Mans draugs ir pabeidzis), ko Latvijā vispār var atrast. =] Tagad paliek tikai viens mācīšanās ceļš... Pašmācība! Protams, tas nav tik viegli kā ja Tev visu pasneidz uz paplātes, bet dzīvē jau arī tā būs, ka okej - pabeigsi skolu (skolas)... tālāk? Tu jau nebusi iemācījies visu, ko vien var un kas ir vajadzīgs! Pašam būs jāturpina apgūt visu... )

Teiksim Es pats esmu sasniedzis to, ko esmu. Nevarētu teikt, ka tas nav nekas... Sešpadsmit gados. Tur sāku ar HTML, CSS... Tagad visvairāk ir PHP (tagad sāku draudzēties ar "framework'iem")... Lai gan zinu daudz ko no JavaScript, SQL, pat pamatus Pascal, C++... Jebkurā gadījumā mēģini pats! Mans ieteikums. )

 

Lūk daži linki... (ceru, ka sapratu pareizi un vēlies iemācīties PHP)

 

Link to comment
Share on other sites

Tie ir sīkumi... )

echo "Hello World";

Nu, pēc idejas simbols ";" jau arī ir tikai tāds sīkums, bet re ka bez viņa nevar iztikt. Vai arī funkcija mysql_real_escape_string(). Jā, var jau arī to (un citas taml. funkcijas) neizmantot, bet rezultāts kāds būs? Nedroša lapa?

 

Programmēšana ir tāda sīkumaina lieta. Pie katra sīkuma jāpiekasās ;)

Link to comment
Share on other sites

Mūsdienās jaunu kodu ar mysql_* funkcijām vispār rakstīt nevajadzētu.

Tas extension's kopš 5.3 versijas vairs netiek īsti supportēts.

 

 

Tā vietā vajadzētu izmanto PDO ( http://php.net/pdo ) vai vismaz MySQLi ( http://php.net/mysqli ) ,

un query'us rakstīt izmantojot "prepared statements".

Tad nekāda escape'ošana nav vajadzīga.

Link to comment
Share on other sites

Tā vietā vajadzētu izmanto PDO ( http://php.net/pdo ) vai vismaz MySQLi ( http://php.net/mysqli ) ,

un query'us rakstīt izmantojot "prepared statements".

Tad nekāda escape'ošana nav vajadzīga.

prepeared statment samazina ātrdarbību un palielina trafiku starp db klientu un serveri (pietiekamā mērā, lai to ņemtu vērā), gadījumos, kad kveriji tiek izpildīti vienu vai tikai dažas reizes, kā tas parasti ir ar PHP aplikācijām, jo requesti būtībā ir stateless un katru reizi liekā sql statement-a sagatavošana ir jādara no jauna.

Ja nepatīk manuāla eskeipošana, tad izveidojam db klasi, kas to dara automātiski.

Ja tomēr mums ātrdarbība neinteresē tik daudz, bet svarīga ir ērta izstrāde, tad izmantojam ORM abstrakcijas slāni un nedomājam par to, vai apakšā ir parasti vai prepared statement.

Link to comment
Share on other sites

echo "Hello World";

Nu, pēc idejas simbols ";" jau arī ir tikai tāds sīkums, bet re ka bez viņa nevar iztikt. Vai arī funkcija mysql_real_escape_string(). Jā, var jau arī to (un citas taml. funkcijas) neizmantot, bet rezultāts kāds būs? Nedroša lapa?

 

Tie nav sīkumi. Ir taču jāmāk atšķirt! xD

Link to comment
Share on other sites

prepeared statment samazina ātrdarbību un palielina trafiku starp db klientu un serveri (pietiekamā mērā, lai to ņemtu vērā), gadījumos, kad kveriji tiek izpildīti vienu vai tikai dažas reizes, kā tas parasti ir ar PHP aplikācijām, jo requesti būtībā ir stateless un katru reizi liekā sql statement-a sagatavošana ir jādara no jauna.

Interesanti no kurienes šāda informācijas.

 

 

Iemesli kāpēc lietot prepared statement'us pēc manām domām ir šādi:

  • drošība - datubāze tiek aizsargāda no injekcijām
  • ātrdarbība - tiek ietaupīts laiks uz pieprasījuma izpildes plāna pārrēķināšanas (tie tiek cache'oti ) , pārsūtīto datu apjoma un manipulācijām ar datu tipiem
  • ērtība - ir iepējams padot masīvu ar DB laikiem abilstošām atslēgam pa tiešo iekš execute() vai arī piesaistīt mainīgo references noteiktam laukam

 

Liekas izņēmums ir MySQL versijas, kuras ir vecākas par 5.1 , jo tām nebija implementēts cache priekš prepared statement'iem.

 

Random linki :

 

http://forge.mysql.com/wiki/Which_PHP_Driver_for_MySQL_should_I_use

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

http://blog.ulf-wendel.de/?p=187

Link to comment
Share on other sites

drošība - datubāze tiek aizsargāda no injekcijām

mysqli ir tāda metode kā real_escape_string, kas pilnībā aizsargā no injekcijām.

Tik pat labi arī ar PDO, kāds var iedomāties, ka viņam vajag kverijā dinamiski mainīt lauku pēc kura taisa ORDER BY un viņš to paņem no user inputa un ieliek pa tiešo kverijā un, lūdzu, PDO ielaids sql injekciju. Tā, ka pret muļķiem, arī PDO pret injekcijām nepasargā, tad jau kāds labs ORM varētu pilnībā neļaut muļķiem ielaist injekcijas.

 

ātrdarbība - tiek ietaupīts laiks uz pieprasījuma izpildes plāna pārrēķināšanas (tie tiek cache'oti ) , pārsūtīto datu apjoma un manipulācijām ar datu tipiem

1)Kešoti tiek arī parasti statement-i

2)Plāna nepārrēķināšana tiek izmantota tikai gadījumā, ja vienas db konekcijas laikā, tu izpildi statment-a sagatavošanu un tad izpildi vairākus pieprasījumus ar šo sagatavoto statement-u. Bet tākā web aplikācijas PHP ir stateless, tad katrs pieprasījums taisa jaunu konekciju un realitātē tikai specifiskos gadījumos tev nāksies izpildīt vairākus vienādus kverijus vienas konekcijas laikā, tāpēc vidēji tas radīs aizturi aplikācijas darbībā, jo vajadzēs papriekšu sagatavot statement-u, tad klientam atgriezt atbildi par statement-a sagatavošanu, un tikai tad sūtīt datus un tikai tad saņemt atbildi - strādās lēnāk un palielināsies trafiks starp db klientu(php) un db serveri.

 

ērtība - ir iepējams padot masīvu ar DB laikiem abilstošām atslēgam pa tiešo iekš execute() vai arī piesaistīt mainīgo references noteiktam laukam

Jebkurš normāls programmētājs izmanto db klasi, kura automātiski eskeipo un kurai var padot datus dažādās formās, tāpēc parasti tās var realizēt visu to pašu un pat vairāk.

Piemēram, klasē, kuru izmantoju pats, var rakstīt šādi (apakšā nav prepared statement-s):

$user=Db::row("SELECT * FROM users WHERE id=%s",$_GET['userid']]);

vai

$comments=Db::rows("SELECT * FROM comments WHERE articleid=%aid$s and publicated=%pub$s",
 array(
   "pub"=>1,
   "aid"=>27
 ));

Lai gan reāli es praksē 90% gadījumu izmantoju ORM un tikai reizēs, kad ir vajadzīgi efektīvi kveriji, kurus ORM nemāk uzģenerēt, atgriežos pie pliku sql rakstīšanas.

Edited by codez
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...