Utgivelsen av PHP versjon 5 inkluderte en ny utvidelse for tilgang til MySQL-databaser kalt MySQL Forbedret , eller MySQLi . MySQLi gir forbedret ytelse, et objektorientert struktur , støtte for preparerte uttalelser om utvidet funksjonalitet i form av databasetransaksjoner . Den nåværende MySQL utvidelsen vil ikke bli forbedret, for eksempel for å gi unicode støtte , og vil etter hvert fases ut begynner med PHP versjon 6 . Object -Oriented Struktur
MySQLi gir et sett av funksjoner for en prosessuell - stil kode struktur for å gjøre overgangen fra MySQL enklere. Det gir imidlertid også funksjonalitet gjennom et sett med objektorienterte klasser . Ved hjelp av et objekt - orientert stil kan gjøre MySQL integrering passe bedre med PHP versjon 5 objektorienterte funksjoner og ofte eliminerer behovet for å skape ekstra variabler for å støtte MySQL operasjoner og oppgaver . For eksempel viser det følgende kode for å koble til en database server og åpne en database i både MySQL og MySQLi : MySQL : $ DBC = mysql_connect ( " localhost ", " bruker", "passord "); $ db = mysql_select_database ( "database ");
mySQLi : $ db = new mysqli ( " localhost ", " bruker", "passord" , "database ");
preparerte uttalelser
Kanskje den største forskjellen mellom MySQL og MySQLi er MySQLi støtte til preparerte uttalelser. Med MySQL , må du ta ekstra hensyn å unnslippe hver streng som brukes i en spørring for å forhindre SQL-injeksjon angrep . Med MySQLi og forberedt uttalelser , binde deg et sett med parametre til en spørring og sette parametre som tilsvarer de ulike verdiene du vil bruke i spørringen . MySQLi tar seg av å sørge for at all kode er riktig rømt før den legges til databasen . For eksempel følgende kode inserts to recrods i en MySQL tabell ved hjelp MySQLi : en
$ stmt = $ db - > forberede ( " INSERT INTO PEOPLE ( FullName , e-post ) verdier ( , ), $ ? stmt - > bind_param ( " ss" , $ fullname , $ email ), $ fullname = " John Johnson" , $ email = " john@johnjohnson.com "; $ stmt - > utføre ( ); $ fullname = " Mary Johnson" , $ email = " mary@johnjohnson.com "; $ stmt - > utføre ( ) ; $ stmt - > close () ;
Efficiency forbedringer
Fordi preparerte uttalelser og andre effektivisering , bør MySQLi forlengelse utføre raskere enn tilsvarende MySQL uttalelser . Som du kan se fra forrige eksempel med preparerte uttalelser, er overhead av et innstikk bare nødvendig gang , da er utarbeidet . ved en tilsvarende MySQL insert, ville overhead av innsatsen bli gjentatt med hver pakning spørring til databasen .
Transaksjoner
MySQLi gir ytterligere funksjonalitet i form av transaksjoner . med MySQLi forlengelse, kan du pakke et sett med data operasjoner sammen i en transaksjon og utføre operasjonene sammen som en enkelt transaksjon . Hvis en operasjon i transaksjonen svikter, svikter hele operasjonen og eventuelle endringer som er gjort er rullet tilbake. for eksempel kan du bruke en transaksjon når du programmerer en overføring av penger mellom to kontoer , fordi mindre begge sider av operasjonen lykkes , er operasjonen ikke er en suksess, og du ikke ønsker å forlate en tilstand der én konto er belastet , men den andre kontoen har ikke blitt kreditert .