DBMS MySQL is een van de vele databases die door PHP worden ondersteund. Het MySQL-systeem wordt gratis verspreid en heeft voldoende kracht om echte problemen op te lossen.
Een korte introductie tot MySQL
SQL is een afkorting voor de woorden Structured Query Language, wat betekent gestructureerde taal verzoeken. Deze taal is het standaardmiddel om toegang te krijgen tot verschillende databases.
Het MySQL-systeem is een server waarmee gebruikers van externe computers verbinding kunnen maken.
Om met databases te werken, is het handig om de tool te gebruiken die in de webontwikkelaarskit zit: Denwer phpMyAdmin. Hier kunt u een nieuwe database maken, een nieuwe tabel maken in de geselecteerde database, de tabel vullen met gegevens en gegevens toevoegen, verwijderen en bewerken.
MySQL definieert drie basisgegevenstypen: numeriek, datetime en string. Elk van deze categorieën is onderverdeeld in vele soorten. De belangrijkste zijn:
Elke kolom na het gegevenstype bevat andere specificaties:
Type | Beschrijving |
---|---|
NIET NUL | Alle tabelrijen moeten een waarde in dit kenmerk hebben. Indien niet opgegeven, kan het veld leeg zijn (NULL) |
AUTO_INCREMENT | Een speciale MySQL-functie die op numerieke kolommen kan worden gebruikt. Als u zo'n veld leeg laat bij het invoegen van rijen in een tabel, genereert MySQL automatisch unieke waarde identificatie. Deze waarde is één meer dan de maximale waarde die al in de kolom bestaat. Elke tabel kan maximaal één zo'n veld hebben. Kolommen met AUTO_INCREMENT moeten worden geïndexeerd |
HOOFDSLEUTEL | De kolom is de primaire sleutel voor de tabel. De gegevens in deze kolom moeten uniek zijn. MySQL indexeert deze kolom automatisch |
NIET ONDERTEKEND | Na integer type betekent dat de waarde positief of nul kan zijn |
OPMERKING | Naam tabelkolom |
creatie nieuwe basis MySQL-gegevens MAAK DATABASE.
MAAK DATABASE INDIEN NIET BESTAAT `base` STANDAARD KARAKTERSET cp1251 COLLATE cp1251_bin
creatie nieuwe tafel uitgevoerd met behulp van SQL-opdracht MAAK TAFEL. De boekentabel voor een boekhandel zou bijvoorbeeld vijf velden hebben: ISBN, auteur, titel, prijs en aantal exemplaren:
MAAK TAFELboeken (ISBN CHAR(13) NOT NULL, PRIMARY KEY (ISBN), auteur VARCHAR(30), titel VARCHAR(60), prijs FLOAT(4,2), hoeveelheid TINYINT UNSIGNED); Om een foutmelding te voorkomen als de tabel al bestaat, moet u de eerste regel wijzigen door de zin "IF NOT EXISTS" toe te voegen: CREATE TABLE IF NOT EXISTS books ...
Voor het maken van veld voor automatisch bijwerken van huidige datum van het type TIMESTAMP of DATETIME gebruik de volgende constructie:
MAAK TABEL t1 (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP OP UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP OP UPDATE CURRENT_TIMESTAMP);
Aanvulling gegevens in deze tabel worden uitgevoerd met behulp van de SQL-opdracht INSERT. Bijvoorbeeld:
INSERT INTO boeken (ISBN, auteur, titel, prijs, aantal) WAARDEN ("5-8459-0184-7", "Zandstra Mat", "Teach Yourself PHP4 in 24 Hours", "129", "5");
De operator wordt gebruikt om gegevens uit een tabel op te halen. KIES. Het haalt gegevens op uit de database door rijen te selecteren die voldoen aan de opgegeven zoekcriteria. De SELECT-instructie wordt geleverd met een groot aantal opties en use-cases.
Het * symbool betekent dat alle velden verplicht zijn. Bijvoorbeeld:
KIES * UIT boeken;
Om alleen toegang te krijgen tot een bepaald veld, moet u de naam ervan specificeren in de SELECT-instructie. Bijvoorbeeld:
SELECTEER auteur, titel, prijs UIT boeken;
Om toegang te krijgen tot een subset van rijen in een tabel, moet u een selectiecriterium opgeven, dat wordt bepaald door de constructie WAAR. Als u bijvoorbeeld beschikbare goedkope boeken over PHP wilt selecteren, stelt u een vraag op:
KIES * UIT boeken WAAR prijs % Komt overeen met een willekeurig aantal tekens, zelfs nul
_ Komt overeen met precies één teken
Om ervoor te zorgen dat de door query opgehaalde rijen in een bepaalde volgorde worden weergegeven, wordt de constructie gebruikt BESTEL DOOR. Bijvoorbeeld:
SELECTEER * UIT boeken BESTEL OP prijs;
Standaard volgorde sorteren gaat in oplopende volgorde. U kunt de sorteervolgorde omdraaien met trefwoord DESC:
SELECTEER * UIT boeken BESTEL OP prijs DESC;
Soort U kunt ook meerdere kolommen gebruiken. In plaats van kolomnamen kunt u hun serienummers gebruiken:
KIES * UIT boeken BESTEL DOOR 4, 2, 3;
Gebruik de opdracht om de eerder in de tabel vastgelegde waarden te wijzigen BIJWERKEN. De prijs van alle boeken is bijvoorbeeld met 10% gestegen:
UPDATE boeken SET prijs = prijs * 1.1;
De WHERE-clausule beperkt de UPDATE tot bepaalde rijen. Bijvoorbeeld:
UPDATE boeken SET prijs = prijs * 1.05 WHERE prijs
Gebruik de instructie . om rijen uit een database te verwijderen VERWIJDEREN. Onnodige rijen worden opgegeven met behulp van de WHERE-component. Sommige boeken worden bijvoorbeeld verkocht:
VERWIJDER UIT boeken WAAR aantal = 0;
Als u alle vermeldingen wilt verwijderen
TRUNCATE TABLE tabelnaam
Gebruik om een tabel volledig te verwijderen:
DROP TABLE tabelnaam
PHP-communicatie met MySQL-database
Nadat u met phpMyAdmin heeft gewerkt om een database te maken, kunt u beginnen met het verbinden van deze database met de externe webinterface.
Om toegang te krijgen tot een database vanaf het web met behulp van PHP, moeten de volgende basisstappen worden genomen:
- Verbinding met MySQL-server.
- Database selectie.
- Een databasequery uitvoeren:
- toevoegen;
- verwijdering;
- verandering;
- Zoekopdracht;
- sorteren.
- Het resultaat van een query ophalen.
- Loskoppelen van de database.
Om verbinding te maken met een databaseserver in PHP is er een functie mysql_connect(). De argumenten zijn computernaam, gebruikersnaam en wachtwoord. Deze argumenten kunnen worden weggelaten. Standaard computernaam = localhost , dan zijn gebruikersnaam en wachtwoord niet vereist. Als PHP wordt gebruikt in combinatie met Apache-server, dan kunt u de functie gebruiken: mysql_pconnect(). In dit geval verdwijnt de verbinding met de server niet nadat het programma is beëindigd of de functie is aangeroepen. mysql_close(). Functies mysql_connect() En mysql_pconnect() retourneer de verbindings-ID als alles goed is gegaan. Bijvoorbeeld:
$link = mysql_pconnect(); if (!$link) sterft ("Kan geen verbinding maken met MySQL");
Nadat de verbinding met de MySQL-server tot stand is gebracht, moet u een database selecteren. Hiervoor wordt de functie gebruikt mysql_select_db(). Het argument is de naam van de database. De functie retourneert true als de opgegeven database bestaat en toegankelijk is. Bijvoorbeeld:
$db = "voorbeeld"; mysql_select_db($db) or die("Kan $db niet openen");
Voor het toevoegen, verwijderen, wijzigen en selecteren van gegevens moet een SQL-query worden gemaakt en uitgevoerd. voor dit in PHP-taal er is een functie mysql_query(). Het argument is een querystring. De functie retourneert de aanvraag-ID.
voorbeeld 1
Elke keer dat u Voorbeeld 1 uitvoert, wordt er een nieuw record toegevoegd aan de tabel met dezelfde gegevens. Uiteraard is het zinvol om de door de gebruiker ingevoerde gegevens aan de database toe te voegen.
Voorbeeld 2-1 toont een HTML-formulier voor het toevoegen van nieuwe boeken aan de database.
Voorbeeld 2.1
De resultaten van het invullen van dit formulier worden overgebracht naar insert_book.php.
Voorbeeld 2.2
In voorbeeld 2.2 worden de ingevoerde stringgegevens verwerkt door de functie voegt wimpers(). Deze functie voegt backslashes toe voor enkele aanhalingstekens ("), dubbele aanhalingstekens ("), backslashes (\) en null-byte. Het is een feit dat volgens de vereisten van de syntaxis van de databasequery, dergelijke tekens tussen aanhalingstekens moeten worden geplaatst.
Om het aantal records in het queryresultaat te bepalen, gebruikt u de functie mysql_num_rows().
Alle records met queryresultaten kunnen in een lus worden bekeken. Daarvoor, met behulp van de functie mysql_fetch_ voor elke inzending krijg associatieve array.
Voorbeeld 3.1 is een HTML-formulier voor het zoeken naar specifieke boeken in een database.
Voorbeeld 3.1
De resultaten van dit formulier worden doorgegeven aan search_book.php.
Voorbeeld 3.2
".($i+1). $row["title"]. "
Alternatieve optie
Ga terug en voltooi met typen"); $searchterm = addlashes($searchterm); mysql_connect() or die ("Kan geen verbinding maken met MySQL"); mysql_select_db ("sample") of die ("Kan DB niet openen" ); $ result = mysql_query ("SELECT * FROM books WHERE ".$_POST["searchtype"]." zoals "%".$searchterm."%""); $i=1; while($row = mysql_fetch_array( $resultaat) ) ( echo "
".($i++) .$row["titel"]."
"; echo "Auteur: ".$row["auteur"]."
"; echo "ISBN: ".$row["ISBN"]."
"; echo "Prijs: ".$row["prijs"]."
"; echo "Aantal: ".$row["hoeveelheid"]."
Dus hoe werkt de webdatabase-architectuur:
- De webbrowser van de gebruiker geeft een HTTP-verzoek voor een specifieke webpagina. Een gebruiker die bijvoorbeeld een HTML-formulier gebruikt, zoekt naar alle PHP-boeken. De formulierverwerkingspagina heet search_book.php.
- De webserver ontvangt een verzoek voor search_book.php, haalt dit bestand op en geeft het door aan de PHP-engine voor verwerking.
- PHP maakt verbinding met de MySQL-server en verzendt het verzoek.
- De server ontvangt een databaseverzoek, verwerkt het en stuurt het resultaat (een lijst met boeken) terug naar de PHP-engine.
- PHP-engine is voltooid script uitvoering, maakt het queryresultaat op in HTML. Het resultaat wordt dan als HTML teruggestuurd naar de webserver.
- De webserver stuurt de HTML naar de browser en de gebruiker kan de gevraagde lijst met boeken bekijken.
Het transactiemechanisme gebruiken
Het transactiemechanisme gebruiken als voorbeeld van hoe u geld van de ene persoon naar de andere kunt overboeken
If(mysql_query ("BEGIN") && mysql_query ("UPDATE money SET amt = amt - 6 WHERE name = "Eve"") && mysql_query ("UPDATE money SET amt = amt + 6 WHERE name = "Ida"") && mysql_query ("COMMIT"))( echo "Succes"; )else( mysql_query ("ROLLBACK"); echo "Niet succesvol"; )
KIES … VOOR UPDATE
Als u meerdere processen uitvoert die een selectiequery maken op dezelfde tabel, kunnen ze tegelijkertijd dezelfde record selecteren.
Om de bovengenoemde situatie te voorkomen, is het noodzakelijk om niet alleen een SELECT-query uit te voeren, maar ook de uitgebreide versie, die velen niet eens vermoeden: SELECT ... FOR UPDATE.
Bij het uitvoeren van deze query worden dus alle betrokken records in de database vergrendeld totdat de sessie met de database is voltooid of totdat deze records zijn bijgewerkt. Een ander script kan geen vergrendelde records selecteren totdat een van de genoemde voorwaarden zich voordoet.
Echter niet allemaal zo eenvoudig. U moet nog aan een aantal voorwaarden voldoen. Ten eerste moet uw tabel gebaseerd zijn op de InnoDB-architectuur. IN anders blokkeren werkt gewoon niet. Ten tweede moet u, voordat u de ophaalactie uitvoert, de automatische toewijzing van de query uitschakelen. Die. met andere woorden, automatische uitvoering van het verzoek. Nadat u een UPDATE-verzoek hebt opgegeven, moet u opnieuw contact opnemen met de database en de wijzigingen vastleggen met de opdracht COMMIT:
9 oktober 2008 om 23:37 uurOptimalisatie MySQL-query's
- MySQL
In het dagelijkse werk heb je te maken met redelijk vergelijkbare fouten bij het schrijven van query's.
In dit artikel wil ik voorbeelden geven van hoe je GEEN queries moet schrijven.
- Alle velden selecteren
SELECT * UIT tabelSelecteer bij het schrijven van query's niet alle velden - "*". Vermeld alleen de velden die u echt nodig heeft. Dit vermindert de hoeveelheid opgehaalde en verzonden gegevens. Vergeet ook niet om indexen te dekken. Zelfs als u alle velden in de tabel echt nodig heeft, kunt u ze het beste opsommen. Ten eerste verbetert het de leesbaarheid van de code. Bij gebruik van een asterisk is het onmogelijk om te achterhalen welke velden in de tabel staan zonder ernaar te kijken. Ten tweede kan het aantal kolommen in uw tabel na verloop van tijd veranderen, en als het vandaag vijf INT-kolommen zijn, kunnen over een maand TEKST- en BLOB-velden worden toegevoegd, wat de selectie zal vertragen.
- Verzoeken in een cyclus.
U moet duidelijk begrijpen dat SQL een taal is die op sets werkt. Soms zijn programmeurs die gewend zijn in termen te denken proceduretalen, is het moeilijk om het denken in de taal van verzamelingen te herstructureren. Dit kan heel eenvoudig worden gedaan door een eenvoudige regel aan te nemen - "voer query's nooit in een lus uit." Voorbeelden van hoe dit kan:1. Voorbeelden:
$news_ids = get_list("SELECT news_id FROM today_news ");
while($news_id = get_next($news_ids))
$news = get_row("SELECT title, body FROM news WHERE news_id = ". $news_id);De regel is heel eenvoudig: hoe minder verzoeken, hoe beter (hoewel er uitzonderingen zijn, zoals bij elke regel). Vergeet de IN() constructie niet. De bovenstaande code kan in één query worden geschreven:
SELECT titel, tekst FROM today_news INNER JOIN nieuws USING(news_id)2. Tussenvoegsels
$log = parse_log();
while($record = volgende($log))
query("INSERT INTO logs SET value = "(!LANG:. $log["value"]);!}Het is veel efficiënter om één enkele query te lijmen en uit te voeren:
INSERT INTO logs (waarde) VALUES (...), (...)3. Updates
Soms moet u meerdere rijen in dezelfde tabel bijwerken. Als de bijgewerkte waarde hetzelfde is, is alles eenvoudig:
UPDATE nieuws SET title="(!LANG:test" WHERE id IN (1, 2, 3).!}Als veranderlijke waarde voor elk record anders is, dan kan dit met de volgende query:
UPDATE nieuws SET
titel = GEVAL
WHEN news_id = 1 THEN "aa"
WHEN news_id = 2 THEN "bb" END
WHERE news_id IN (1, 2)Uit onze tests blijkt dat een dergelijke zoekopdracht 2-3 keer sneller is dan meerdere afzonderlijke zoekopdrachten.
- Bewerkingen uitvoeren op geïndexeerde velden
SELECT user_id FROM gebruikers WHERE blogs_count * 2 = $waardeDeze zoekopdracht gebruikt geen index, zelfs niet als de kolom blogs_count is geïndexeerd. Om een index te kunnen gebruiken, moeten er geen transformaties worden uitgevoerd op het geïndexeerde veld in de query. Verplaats voor dergelijke verzoeken de conversiefuncties naar een ander deel:
SELECT user_id FROM gebruikers WHERE blogs_count = $value / 2;Vergelijkbaar voorbeeld:
SELECT user_id FROM gebruikers WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(geregistreerd)<= 10;Zal geen index gebruiken op het geregistreerde veld, terwijl
SELECT user_id FROM gebruikers WAAR geregistreerd >= DATE_SUB (CURRENT_DATE, INTERVAL 10 DAY);
zullen. - Rijen ophalen om hun aantal te tellen
$result = mysql_query("SELECT * FROM table", $link);
$num_rows = mysql_num_rows($resultaat);
Als u het aantal rijen moet selecteren dat aan een bepaalde voorwaarde voldoet, gebruikt u de tabelquery SELECT COUNT(*) FROM in plaats van alle rijen te selecteren om ze te tellen. - Extra rijen ophalen
$result = mysql_query("SELECT * FROM table1", $link);
while($row = mysql_fetch_assoc($result) && $i< 20) {
…
}
Als u slechts n voorbeeldrijen wilt, gebruikt u LIMIT in plaats van extra rijen in uw toepassing weg te gooien. - ORDER BY RAND() gebruiken
SELECTEER * UIT tabel ORDER BY RAND() LIMIT 1;Als de tabel meer dan 4-5 duizend rijen heeft, werkt ORDER BY RAND () erg langzaam. Het is veel efficiënter om twee query's uit te voeren:
Als de tabel een primaire sleutel auto_increment" heeft en geen hiaten:
$rnd = rand(1, query("SELECT MAX(id) FROM table"));
$row = query("SELECT * FROM tabel WHERE id = ".$rnd);Of:
$cnt = query("SELECT COUNT(*) FROM tabel");
$row = query("SELECT * FROM table LIMIT ".$cnt.", 1");
die echter ook traag kan zijn met een zeer groot aantal rijen in de tabel. - Een groot aantal JOINs gebruiken
KIES
v.video_id
een naam,
g.genre
VAN
video's AS v
LINKS DOEN
link_actors_videos AS la ON la.video_id = v.video_id
LINKS DOEN
acteurs AS a ON a.actor_id = la.actor_id
LINKS DOEN
link_genre_video AS lg ON lg.video_id = v.video_id
LINKS DOEN
genres AS g ON g.genre_id = lg.genre_idHoud er rekening mee dat wanneer tabellen een-op-veel worden gekoppeld, het aantal rijen in de selectie zal groeien met elke volgende JOIN "e. Voor soortgelijke gevallen het is sneller om zo'n verzoek op te splitsen in meerdere eenvoudige.
- LIMIT . gebruiken
SELECT... FROM tabel LIMIT $start, $per_pageVeel mensen denken dat een dergelijke zoekopdracht $per_page-records zal opleveren (meestal 10-20) en daarom snel werken. Het zal snel werken voor de eerste paar pagina's. Maar als het aantal records groot is en u een SELECT ... FROM table LIMIT 1000000, 1000020 query moet uitvoeren, dan zal MySQL om een dergelijke query uit te voeren eerst 1000020 records selecteren, het eerste miljoen weggooien en 20 retourneren. misschien helemaal niet snel. Er zijn geen triviale manieren om het probleem op te lossen. Velen beperken gewoon het bedrag beschikbare pagina's redelijk aantal. Je kunt ook versnellen soortgelijke verzoeken met behulp van dekkende indices, of oplossingen van derden(bijvoorbeeld sfinx).
- Geen gebruik van ON DUBBELE KEY UPDATE
$row = query("SELECT * FROM tabel WHERE id=1");Als($rij)
query("UPDATE tabel SET kolom = kolom + 1 WHERE id=1")
anders
query ("INSERT INTO table SET column = 1, id=1");Een vergelijkbare constructie kan worden vervangen door een enkel verzoek, op voorwaarde dat er een primaire of unieke sleutel in het id-veld staat:
INSERT INTO tabel SET kolom = 1, id=1 OP DUPLICATE KEY UPDATE kolom = kolom + 1
In dit artikel zullen we leren databasequery's verzenden via PHP. Dit artikel is erg belangrijk en u moet het begrijpen. Ik zal u echter geruststellen - het materiaal is heel eenvoudig, dus er zouden geen problemen moeten zijn.
Voordat ik verder ga met het onderwerp van het artikel, waarschuw ik u van tevoren dat ik niet in detail zal analyseren SQL-taal . Alle benodigde informatie is gesorteerd in de categorie gewijd aan, en hier hebben we alleen werken met MySQL via PHP.
Laten we nu verder gaan met databasequery's verzenden in PHP:
}
$mysqli->query("INSERT INTO mytable (name, email) VALUES ("MijnNaam", " [e-mail beveiligd]")");
$mysqli->close();
?>
IN dit voorbeeld we hebben verbinding gemaakt met de database, hebben gecontroleerd of de verbinding is gelukt, hebben het verzoek verzonden met de methode vraag(), en verbrak vervolgens de verbinding. Zoals je kunt zien, is alles heel eenvoudig. Om iets te verzenden SQL-query's slechts één methode is genoeg - vraag(), dus in deze zaak alles is waanzinnig eenvoudig.
Laten we de taak nu een beetje ingewikkelder maken. Laten we eens kijken naar de zoekopdrachten die terugkeren resultaat_set- resultaat. Meest populair verzoek, die terugkeert resultaat_set is een selectie van gegevens uit een tabel. In het volgende voorbeeld zullen we een selectie van gegevens maken en vervolgens het resultaat weergeven:
$mysqli = @new mysqli("localhost", "Admin", "pass", "mybase");
if (mysqli_connect_errno()) (
echo "Verbinding mislukt: ".mysqli_connect_error();
}
$result_set = $mysqli->
while ($row = $result_set->fetch_assoc()) (
print_r($rij);
echo "
";
}
$result_set->close();
$mysqli->close();
?>
Laat me eerst een beetje uitleggen wat het is. resultaat_set. resultaat_set is een tabel met het resultaat. Deze tabel heeft een set records (tabelrijen). En om alle records weer te geven, moet u elke rij van de tabel herhalen en weergeven. En nu leg ik een voorbeeld uit: na het verzenden van een verzoek vormen we resultaat_set. Vervolgens wijzen we toe aan een variabele in een lus rij de waarde van de volgende regel, dat wil zeggen eendimensionale matrix welke methode retourneert fetch_assoc(). Wanneer alle regels zijn voltooid, wordt de methode fetch_assoc() zal terugkeren vals, en de lus wordt afgesloten. Binnen de lus terwijl we voeren de array gewoon uit met behulp van de debug-functie print_r(), hoewel het zeker kan worden afgeleid met behulp van foreach maar dat is nu niet nodig.
Laten we kort samenvatten hoe te werken met resultaat_set:
- Ontvangen resultaat_set door de juiste query naar de database te sturen.
- Wijs in de lus bij elke iteratie de volgende regel (record) toe van resultaat_set met behulp van methode fetch_assoc() een of andere variabele rij. Dan kun je met deze variabele werken als met een eendimensionale associatieve array, waarvan de sleutels de namen van de tabelvelden zijn, en de waarden corresponderen met het huidige record.
- Sluit zeker af resultaat_set methode dichtbij() bronnen te verkennen.
Zoals je kunt zien, is de methode: fetch_assoc() keert altijd terug volgende post. Dat wil zeggen, eerst de 1e, dan de 2e, dan de 3e enzovoort. Als je een goede programmeerervaring hebt, dan raad je meteen dat dit komt door de interne aanwijzer, die je natuurlijk kunt verplaatsen. Waar wordt het gebruikt? Dit kan bijvoorbeeld worden gebruikt wanneer u moet werken met resultaat_set niet 1 , maar 2 en vaker. Om hetzelfde verzoek niet opnieuw te vormen, kunt u de aanwijzer eenvoudig naar het begin verplaatsen. En dan kun je het weer doen resultaat_set met behulp van de fetch_assoc() methode.
Er is een methode om de positie van de aanwijzer te veranderen data_seek(), die een geheel getal neemt van 0 voordat " aantal inschrijvingen - 1", respectievelijk, de aanwijzer stijgt naar het item dat overeenkomt met de parameter:
$mysqli = @new mysqli("localhost", "Admin", "pass", "mybase");
if (mysqli_connect_errno()) (
echo "Verbinding mislukt: ".mysqli_connect_error();
}
$result_set = $mysqli->query("SELECT * FROM mytable");
$result_set->num_rows;
while ($row = $result_set->fetch_assoc()) (
print_r($rij);
echo "
";
}
$result_set->data_seek(0);
while ($row = $result_set->fetch_assoc()) (
print_r($rij);
echo "
";
}
$result_set->close();
$mysqli->close();
?>
In dit voorbeeld hebben we aantal vermeldingen in resultaat_set eigendom gebruiken aantal_rijen. Ook hebben we kennis gemaakt met de methode data_seek(). Dat wil zeggen, we herhalen het hele resultaat en retourneren vervolgens een aanwijzer naar 0e opnemen en het resultaat opnieuw uitzoeken.
In dit artikel hebben we de verbinding met de database herhaald en de verbinding verbroken. En ook ontdekt hoe databasequery's te verzenden via php. Geleerd, hoe resultaat_set te krijgen en hoe ermee te werken. Dat is alles wat u moet weten om succesvol te zijn werken met MySQL in PHP.
Syntaxis:
* waar velden1- velden voor selectie gescheiden door komma's, u kunt ook alle velden specificeren met *; tafel- de naam van de tabel waaruit we de gegevens halen; conditie— bemonsteringsvoorwaarden; velden2— veld of velden, gescheiden door komma's, waarop moet worden gesorteerd; Graaf— het aantal te downloaden rijen.
* aanvraag in vierkante haakjes is niet vereist voor gegevensbemonstering.
Eenvoudige gebruiksscenario's voor select
1. Normale gegevensbemonstering:
> KIES * VAN gebruikers
2. Gegevensselectie met het samenvoegen van twee tabellen (JOIN):
SELECT u.name, r.* FROM gebruikers u WORD LID van users_rights r ON r.user_id=u.id
* in dit voorbeeld zijn gegevens geselecteerd met samenvoegtabellen gebruikers En gebruikersrechten. Ze zijn gegroepeerd op velden. gebruikersnaam(in de user_rights tabel) en ID kaart(gebruikers). Het naamveld wordt opgehaald uit de eerste tabel en alle velden uit de tweede.
3. Bemonstering met een interval van tijd en/of datum
a) het startpunt en een bepaald tijdsinterval zijn bekend:
* gegevens worden geselecteerd voor laatste uur(veld datum).
b) de startdatum en einddatum zijn bekend:
25.10.2017 En 25.11.2017 .
c) begin- en einddatum + tijd zijn bekend:
* selecteer gegevens tussen 25-03-2018 0 uur 15 minuten En 25.04.2018 15 uur 33 minuten en 9 seconden.
d) gegevens ophalen voor een specifieke maand en jaar:
* extraheer gegevens waar in het veld datum er zijn waarden voor april 2018 van het jaar.
4. Steekproef van de maximale, minimale en gemiddelde waarde:
> SELECTEER max(gebied), min(gebied), gem(gebied) UIT land
* max — maximale waarde; min- minimaal; gemiddeld- het gemiddelde.
5. Stringlengte gebruiken:
* gegeven verzoek moet alle gebruikers tonen wiens naam uit 5 tekens bestaat.
Voorbeelden van complexere of zelden gebruikte zoekopdrachten
1. Samenvoegen met het groeperen van de geselecteerde gegevens in één regel (GROUP_CONCAT):
* van tafel gebruikers gegevens ophalen per veld ID kaart, ze passen allemaal op één regel, de waarden zijn gescheiden komma's.
2. Gegevens groeperen op twee of meer velden:
> KIES * UIT gebruikers GROEP OP CONCAT (titel, "::", geboorte)
* totaal, in dit voorbeeld zullen we gegevens uit de gebruikerstabel verwijderen en ze groeperen op velden titel En geboorte. Voordat we gaan groeperen, voegen we de velden samen tot één regel met een scheidingsteken :: .
3. Resultaten uit twee tabellen combineren (UNION):
> (SELECT id, fio, adres, "Gebruikers" als type FROM gebruikers)
UNIE
(SELECTEER id, fio, adres, "Klanten" als type FROM klanten)
* in dit voorbeeld worden gegevens opgehaald uit tabellen gebruikers En klanten.
4. Een steekproef van gemiddelden gegroepeerd voor elk uur:
SELECT avg(temperatuur), DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H") as hour_datetime FROM archief GROUP BY DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H")
* hier extraheren we de gemiddelde waarde van het veld temperatuur- van de tafel archief en groeperen op veld datum/tijd-update(met tijdverdeling voor elk uur).
Invoegen (INSERT)
Syntaxis 1:
> INVOEREN IN
Als je meer vragen hebt of iets niet duidelijk is - welkom op onze | |
|