X

Autorius Tema: MeekroDB - Mysqli duomenų bazės klasė  (Skaityta 296 kartus)

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 1521
  • Karma: +40/-8
    • Žiūrėti profilį
MeekroDB - Mysqli duomenų bazės klasė
« Įrašytas: 2012-06-23 22:17:11 pm »
Sveiki,
Internete neperseniausiai aptikau ir dabar dažniasiai naudojų šitą klasę - www.meekrodb.com

Kuo ji išskirtinė?  Na pirmiausia tuom, kad užklausos yra itin sutrumpėjusios ( gal ne visos, bet ... ), sakykim norint ištrinti kokį nors dalyką iš DB reikia tik iškviesti funkciją:
<?php
DB
::delete("lentele","WHERE id = %i"1);
?>

Taip, iš pradžių atrodo sudėtinga, bet kuo toliau to geriau :)

Tiesa, šios klasės kūrėjas teigia, kad ji geresnė nei PDO ar panašiai ( bent taip galima suprasti ), nes ši klasė atlieka tą patį ir net daugiau :) - Nors aš nežinau, nes PDO nebandžiau :D

Taigi, išbandykit ir sakykit savo nuomonę :)

Taip pat ši sistema naudojama www.icy.blg.lt :)

Pvz. iš oficialios svetainės:
Citata
Classic Select
Standard PHP forces you to remember to escape every variable. Don't drop any quotes or forget any escapes, or you're in trouble!   
$mysqli->query("SELECT * FROM login WHERE username='"
  . $mysqli->real_escape_string($username) . "' AND password='"
  . $mysqli->real_escape_string($password) . "'");
MeekroDB takes care of quotes and escaping for you.
DB::query("SELECT * FROM login WHERE username=%s AND password=%s", $username, $password);


Citata
Large Update or Insert
Standard PHP forces you to count the column names yourself to make sure everything goes into the right field. Don't forget to escape all strings, too, if you don't want to get hacked!
$mysqli->query("INSERT INTO mytable (`name`, `rank`, `location`, `age`, `intelligence`)
  VALUES ('" . $mysqli->real_escape_string($name) . "','"
  . $mysqli->real_escape_string($rank) . "','"
  . $mysqli->real_escape_string($location) . "',"
  . intval($age) . ",'"
  . $mysqli->real_escape_string($intelligence) . "')");
MeekroDB lets you INSERT with a very simple format. You can tell at a glance if everything is right.   
DB::insert('mytable', array(
  'name' => $name,
  'rank' => $rank,
  'location' => $location,
  'age' => $age,
  'intelligence' => $intelligence
));


Citata
Grab One Row or Field
Standard PHP makes it a pain to grab the contents of a single MySQL field.
$result = $mysqli->query("SELECT COUNT(*) FROM accounts");
$row = $result->fetch_assoc();
$number_accounts = $row['COUNT(*)'];
MeekroDB makes it trivial.
   
$number_accounts = DB::queryFirstField("SELECT COUNT(*) FROM accounts");
If you want to grab a row, that's trivial too.

   
$account = DB::queryFirstRow("SELECT * FROM accounts WHERE username=%s", 'Joe');
« Paskutinį kartą keitė: 2012-06-23 22:20:19 pm sukūrė Modestas Vaitkevičius »

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 6817
  • Karma: +210/-15
    • Žiūrėti profilį
    • mano CV
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #1 Įrašytas: 2012-06-25 22:49:09 pm »
o tu paziurek sita:

http://doctrine-124-documentation.blg.lt/

darbe pas mane naudojam doctrine'a, tikrai stipriai pagreitina darba su duombazem
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
blg.lt

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 169
  • Karma: +3/-0
    • Žiūrėti profilį
MeekroDB - Mysqli duomenų bazės klasė - Pradžiamokslio pamoka
« Atsakymas #2 Įrašytas: 2012-12-05 00:02:44 am »
Aš irgi naudoju šią klasę, ji gan saugi, apsaugota nuo mysql injekcijų, ją lengva ir patogu naudoti. MeekroDB galima atsisiųsti iš oficialios šios klasės kūrėjo puslapio - http://www.meekro.com/ . Šioje svetainėje taip pat yra dokumentacija, kaip reikia naudotis. Jeigu kas nesupranta ar  per sudėtinga visa tai atrodo, tai paaiškinsiu paprasčiau.

Pirmą ką reikia padaryti tai atsisiųsti (http://www.meekro.com/download.php). Atsisiuntę įkeliame į šakninį svetainės katalogą. Siūlyčiau dėl paprastumo pervadinti šį failą į meekrodb.php. Atidarę šį failą turim tam tikrose vietose įrašyti prisijungimo duomenis prie duomenų bazės.
 Tai prasidėtų nuo dvidešimtos eilutės po autorinio teksto, rast sunku nebus.
<?php
<...>
class 
DB {

  public static 
$dbName 'dbname'//duomenų bazės vardas
  
public static $user 'usernick'// vartotojo vardas  
  
public static $password ''// vartotojo slaptažodis
  
public static $host 'localhost'// hosto tipas, jeigu vietinis, tai localhost
<...>
?>


Jeigu prisijungimo duomenys parašyti, reikia šį failą įtraukti į visus puslapius, kur bus naudojama duomenų bazė.
Kiekviename puslapyje kur bus naudojama duomenų bazė:
<?php
require_once('meekrodb.php'); 
?>

Norint iškviest mysql funkciją naudojant standartines funkcijas tekdavo rašyti ilgus, sudėtingus pavadinimus. Tačiau su meekro viskas kitaip. Tereikia iškviesti klasę DB ir po dviejų dvitaškių (::) nurodyti funkcijos pavadinimą ir jos viduje kabutėse veiksmus, kokius rašydavote standartinėse užklausose, tiesa kiek kitaip. apie tai dabar ir parašysiu.

Duomenų rinkimui iš duomenų bazės naudojama funkcija query:
<?php
$results 
DB::query("SELECT * FROM vartotojai");
?>
Ši eilutė siunčia užklausą į apache serverį, kad šis išrinktų visus duomenis iš lentelės vartotojai.
Jei norime atvaizduoti kelis įrašus (šiuo atvejus visus vartotojus), reikia atvaizduoti su foreach ciklu:
<?php
foreach($results as $row) {
   
eho $row['vardas']." ".$row['email']." ".$row['registracijos_data'];
}
?>
Meekro yra gan specifinis, ir Jums teks prie to priprasti, nes norint atvaizduoti tik vieną įrašą, reikės naudotis ne query funkcija, o queryRaw:
<?php
$result 
DB::queryRaw('SELECT * FROM vartotojai WHERE uid=%s',$uid);
$user $result -> fetch_assoc(); // fetch_assoc() yra būtinas.

echo $user['vardas']."  ".$user['email']; // atvaizduojamas tik vienas įrašas pagal WHERE sąlygą
?>

Tikriausiai pastebėjote, jog kintamieji nurodomi po užklausos sakinio, o sakinyje kažkokie procentai ir raidės. Taip reikia rašyti, jei norime apsisaugoti, nors galima kintamuosius rašyti tiesiog užklausos sakinyje. Raidės nurodo kintamojo tipą, pvz:
Citata
String = %s
Int = %i
%d   decimal/double
Ir keletas kitų, retai reikalingų gyvenime.


Norint suskaičiuoti įrašus duomenų bazėje reikia naudoti queryFirstField funkciją:
<?php
$number_accounts 
DB::queryFirstField("SELECT COUNT(*) FROM vartotojai");
echo 
$number_accounts// atspausdins skaičių, nurodantį kiek yra įrašų lentelėje vartotojai.
?>
Tai tiek šį vakarą, papildysiu kitą kartą, iki. :)
« Paskutinį kartą keitė: 2012-12-05 00:07:42 am sukūrė Interneto keleivis »
Visi nori laimės, bet niekas nenori skausmo...

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 1521
  • Karma: +40/-8
    • Žiūrėti profilį
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #3 Įrašytas: 2012-12-05 00:08:35 am »
Dalį gerai parašei, bet:

<?php
$result 
DB::queryRaw('SELECT * FROM vartotojai WHERE uid=%s',$uid);
$count DB::count(); // Va tau ir skaičiavimas ( tą patį gali ir po query daryti :D )
?>

Toliau tos tavo neaiškios raidės:
Citata
%s   string
%i   integer
%d   decimal/double
%ss   search string (string surrounded with % for use with LIKE)
%l   literal (no escaping or parsing of any kind -- BE CAREFUL)
%ls   list of strings (array)
%li   list of integers
%ld   list of decimals/doubles
%ll   list of literals (no escaping or parsing of any kind -- BE CAREFUL)

Jos visos BŪTINOS jei tik moki naudotis :)

Taip pat su yrašais gali ir su tuo pačiu queryRaw gauti duomenis kaip su query :) Na žodžiu yra daug smulkmenų, kur gali išspausti daugiau, pvz:
<?php
$user 
DB::queryRaw('SELECT * FROM vartotojai WHERE uid=%s',$uid)->fetch_assoc();
echo 
$user['vardas']."  ".$user['email']; // atvaizduojamas tik vienas įrašas pagal WHERE sąlygą
?>
vietoj tavo:
<?php
$result 
DB::queryRaw('SELECT * FROM vartotojai WHERE uid=%s',$uid);
$user $result -> fetch_assoc(); // fetch_assoc() yra būtinas.

echo $user['vardas']."  ".$user['email']; // atvaizduojamas tik vienas įrašas pagal WHERE sąlygą
?>


Žodžiu, daug galimybė ir greitas įrankis :)

Tiesa, išmok dėti tarpus tarp tų "neaiškių" simbolių, kaip %s %i ir t.t. :) Nepadėsi - bus bėdų ;)
« Paskutinį kartą keitė: 2012-12-05 00:10:44 am sukūrė Modestas Vaitkevičius »

Manualai.lt Forumas

Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #3 Įrašytas: 2012-12-05 00:08:35 am »