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

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 1954
  • Karma: +47/-15
    • Žiūrėti profilį
    • Apie mane
MeekroDB - Mysqli duomenų bazės klasė
« Įrašytas: 2012-06-23 21: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 21:20:19 pm sukūrė Modestas Vaitkevičius »

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7179
  • Karma: +219/-15
    • Žiūrėti profilį
    • mano CV
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #1 Įrašytas: 2012-06-25 21: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!
Free Hosting
Free Templates

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
MeekroDB - Mysqli duomenų bazės klasė - Pradžiamokslio pamoka
« Atsakymas #2 Įrašytas: 2012-12-04 23:02:44 pm »
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-04 23:07:42 pm sukūrė Interneto keleivis »
Guten Tag!

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 1954
  • Karma: +47/-15
    • Žiūrėti profilį
    • Apie mane
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #3 Įrašytas: 2012-12-04 23:08:35 pm »
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-04 23:10:44 pm sukūrė Modestas Vaitkevičius »

Manualai.lt Forumas

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

Neprisijungęs Interneto keleivis

  • Naujokas
  • *
  • Įrašai: 397
  • Karma: +6/-8
    • Žiūrėti profilį
    • Daugiau apie Jį.
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #4 Įrašytas: 2013-01-04 23:32:21 pm »
Ko tu čia pristojai prie tų "neaiškių". Tiesiog pasakiau taip, nes dauguma naujokams jos tikrai bus "neaiškios" kaip ir man pirmą kartą :D.
Guten Tag!

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 1954
  • Karma: +47/-15
    • Žiūrėti profilį
    • Apie mane
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #5 Įrašytas: 2013-01-04 23:47:25 pm »
Su tuo visiškai sutinku, tačiau jas nori ar nenori - reikia žinoti :) Galbūt nevisas, bet reikia :)

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 909
  • Karma: +34/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #6 Įrašytas: 2013-03-26 16:51:55 pm »
Cituoju Interneto Keleivi

<?php
$result 
DB::queryRaw('SELECT * FROM vartotojai WHERE uid=%s',$uid);
?>


%s - string, o $uid kaip suprantu integer, tai butu uid=%i

O cituojant Modesta jeigu reikia tik suskaiciuoti tai:

<?php
$count 
DB::count(DB::queryRaw('SELECT * FROM vartotojai WHERE uid=%i',$uid));
?>

« Paskutinį kartą keitė: 2013-03-26 17:01:00 pm sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7179
  • Karma: +219/-15
    • Žiūrėti profilį
    • mano CV
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #7 Įrašytas: 2013-03-26 18:54:55 pm »
jei jau reikia suskaiciuoti, ne geriau tiesiog sql COUNT naudoti funkcija? ^^

<?php
$result 
DB::queryRaw('SELECT COUNT(*) as sum FROM vartotojai WHERE uid=%s',$uid);
?>

kazkas tokio
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 909
  • Karma: +34/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #8 Įrašytas: 2013-03-26 19:09:25 pm »
jei jau reikia suskaiciuoti, ne geriau tiesiog sql COUNT naudoti funkcija? ^^

<?php
$result 
DB::queryRaw('SELECT COUNT(*) as sum FROM vartotojai WHERE uid=%s',$uid);
?>

kazkas tokio

Na meekroDB sitas dalykas negelbsti

Catchable fatal error: Object of class mysqli_result could not be converted to string

P.S. tikrinau ne pagal id o pagal irasa(tarkim vardas). Nors ir pagal id pakeiciant tipa i %i meta klaida
« Paskutinį kartą keitė: 2013-03-26 19:11:08 pm sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7179
  • Karma: +219/-15
    • Žiūrėti profilį
    • mano CV
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #9 Įrašytas: 2013-03-26 21:09:34 pm »
na nezinau, nenaudoju tokiu atskiru meekrodb naudojau tik kas yra viduj kokio nors frameworko ir ten dazniausiai viskas veikia :)
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 1954
  • Karma: +47/-15
    • Žiūrėti profilį
    • Apie mane
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #10 Įrašytas: 2013-03-26 21:36:42 pm »
jei jau reikia suskaiciuoti, ne geriau tiesiog sql COUNT naudoti funkcija? ^^

<?php
$result 
DB::queryRaw('SELECT COUNT(*) as sum FROM vartotojai WHERE uid=%s',$uid);
?>

kazkas tokio

Na meekroDB sitas dalykas negelbsti

Catchable fatal error: Object of class mysqli_result could not be converted to string

P.S. tikrinau ne pagal id o pagal irasa(tarkim vardas). Nors ir pagal id pakeiciant tipa i %i meta klaida

Šitas dalykas gelbsti, tačiau nepamenu kaip teisingai jį aprašyti dabar :) Yra orginalioj dokumentacijoj man atrodo :)

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 909
  • Karma: +34/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #11 Įrašytas: 2013-03-26 22:09:31 pm »
jei jau reikia suskaiciuoti, ne geriau tiesiog sql COUNT naudoti funkcija? ^^

<?php
$result 
DB::queryRaw('SELECT COUNT(*) as sum FROM vartotojai WHERE uid=%s',$uid);
?>

kazkas tokio

Na meekroDB sitas dalykas negelbsti

Catchable fatal error: Object of class mysqli_result could not be converted to string

P.S. tikrinau ne pagal id o pagal irasa(tarkim vardas). Nors ir pagal id pakeiciant tipa i %i meta klaida

Šitas dalykas gelbsti, tačiau nepamenu kaip teisingai jį aprašyti dabar :) Yra orginalioj dokumentacijoj man atrodo :)

As nelabai radau, jeigu rasi kaip aprasyt kazka tokio ka lukas rase papostink :) Nes dokumentacijoj raso:

<?php

DB
::query("SELECT * FROM accounts WHERE password=%s"'hello');
$counter DB::count();
echo 
$counter " people are using hello as their password!!\n";

?>

[/]
« Paskutinį kartą keitė: 2013-03-26 22:13:25 pm sukūrė ganjabest »
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 1954
  • Karma: +47/-15
    • Žiūrėti profilį
    • Apie mane
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #12 Įrašytas: 2013-03-26 22:13:05 pm »
DB::queryFirstField("SELECT COUNT(*) FROM accounts");

Man regis, na tikrai nepamenu ( Gintas žinojo šitą )

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 909
  • Karma: +34/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #13 Įrašytas: 2013-03-26 22:25:32 pm »
DB::queryFirstField("SELECT COUNT(*) FROM accounts");

Man regis, na tikrai nepamenu ( Gintas žinojo šitą )

Pataikei  ;)
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs Gintas Kovalevskis

  • Dalyvis
  • **
  • Įrašai: 418
  • Karma: +15/-0
    • Žiūrėti profilį
    • Asmeninis portfolio
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #14 Įrašytas: 2013-03-26 23:30:37 pm »
Niekada daug nesigilinau kaip yra su COUNT funkcija, bet manau skaičiuojant elementus yra korektiška nurodyti Field name:
DB::queryFirstField("SELECT COUNT(`id`) FROM accounts");

Nori ir tu tokio paveiksliuko? Apsilankyk FeedMage puslapyje

Neprisijungęs oimg54

  • Naujokas
  • *
  • Įrašai: 4
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #15 Įrašytas: 2013-03-26 23:47:59 pm »
Kam cia isradinejat dviracius, kai tam yra skirta funkcija

DB::queryFirstField("SELECT COUNT(`id`) FROM accounts");

Kuria taip pat nurode Gintas.

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 1954
  • Karma: +47/-15
    • Žiūrėti profilį
    • Apie mane
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #16 Įrašytas: 2013-03-26 23:58:00 pm »
Kam cia isradinejat dviracius, kai tam yra skirta funkcija

DB::queryFirstField("SELECT COUNT(`id`) FROM accounts");

Kuria taip pat nurode Gintas.
Pasiskaityk kelis post'us aukščiau ;)

Neprisijungęs oimg54

  • Naujokas
  • *
  • Įrašai: 4
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #17 Įrašytas: 2013-03-27 00:05:30 am »
ak taip, pirmam antram poste.

Kiek as galiu atlikinet bl situs patikrtinimo testus
 Patikrinimas:
Įrašykite paveikslėlyje parodytas raides
Klausyti raidžių / Rodyti kitą paveikslėlį
Įrašykite paveikslėlyje parodytas raides:
32-2=:

Manualai.lt Forumas

Ats: MeekroDB - Mysqli duomenų bazės klasė
« Atsakymas #17 Įrašytas: 2013-03-27 00:05:30 am »