Manualai.lt Forumas
PHP ir SQL => Kita => Temą pradėjo: Modestas Vaitkevičius 2012-06-23 22:17:11 pm
-
Sveiki,
Internete neperseniausiai aptikau ir dabar dažniasiai naudojų šitą klasę - www.meekrodb.com (http://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 (http://www.icy.blg.lt) :)
Pvz. iš oficialios svetainės:
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);
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
));
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');
-
o tu paziurek sita:
http://doctrine-124-documentation.blg.lt/ (http://doctrine-124-documentation.blg.lt/)
darbe pas mane naudojam doctrine'a, tikrai stipriai pagreitina darba su duombazem
-
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/ (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 (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:
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. :)
-
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:
%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ų ;)