Php-forbindelse til mysql og dataoutput. Oprettelse af forbindelse til en MySQL-database på forskellige måder

ARBEJDER MED EN MySQL DATABASE MED PHP-VÆRKTØJER

Foredrag. Udarbejdet af Prokhorov V.S.


1. FORBINDELSE AF PHP-SCENARIER med MySQL-tabeller

Lad os se på de mest almindeligt anvendte funktioner, der giver dig mulighed for at arbejde med en MySQL-database ved hjælp af PHP.

Når PHP og MySQL interagerer, interagerer programmet med DBMS gennem et sæt funktioner.

1.1 Tilslutning til serveren. Fungeremysql_connect

Før du arbejder med databasen, skal du etablere en netværksforbindelse med den, samt autorisere brugeren. Funktionen mysql_connect() bruges til dette.

ressource mysql_connect(]])

Denne funktion etablerer en netværksforbindelse til MySQL-databasen placeret på værtsserveren $ (som standard er dette localhost, dvs. den aktuelle computer) og returnerer ID'et for den åbne forbindelse. Alt videre arbejde udføres med denne identifikator. Alle andre funktioner, der tager denne identifikator (håndtag) som et argument, vil entydigt identificere den valgte database. Ved registrering skal du angive brugernavnet $brugernavn og adgangskode $password (som standard brugernavnet, som den aktuelle proces kører fra - ved fejlretning af scripts: root og en tom adgangskode):

$dbpasswd = ""; //Adgangskode

//Vis en advarsel

ekko("

");

Variablerne $dblocation, $dbuser og $dbpasswd gemmer servernavnet, brugernavnet og adgangskoden.

1.2 Afbrydelse af forbindelsen til serveren. Fungeremysql_close

Forbindelsen til MySQL-serveren lukkes automatisk, når scriptet er færdigt, eller når funktionen mysql_close kaldes

bool mysql_close()

Denne funktion lukker forbindelsen til MySQL-serveren og returnerer true, hvis handlingen er vellykket og ellers falsk. Funktionen tager som argument databaseforbindelseshåndtaget, der returneres af funktionen mysql_connect.

$dblockation = "localhost"; //Server navn

$dbuser = "rod"; //Brugernavn

$dbpasswd = ""; //Adgangskode

//Opret forbindelse til databaseserveren

//Undtryk fejloutput med @-symbolet, før funktionen kaldes

$dbcnx = @ mysql_connect($dblocation, $dbuser, $dbpasswd);

if (!$dbcnx) //Hvis deskriptoren er 0, er forbindelsen ikke etableret

//Vis en advarsel

ekko("

Databaseserveren er i øjeblikket ikke tilgængelig, så siden kan ikke vises korrekt.");

if (mysql_close($dbcnx)) //luk forbindelsen

echo("Databaseforbindelse afsluttet");

echo("Vi kunne ikke fuldføre forbindelsen");

1.3 Oprettelse af en database. CREATE DATABASE funktion

Kommandoen - opret en database er kun tilgængelig for serveradministratoren, og på de fleste hostingsider kan den ikke udføres:

OPRET DATABASEDatabasenavn

Opretter en ny database med navnet DatabaseName.

Et eksempel på at arbejde med denne funktion:

@mysql_query("OPRET DATABASE $dbname");

Det anbefales at bruge apostrof (“SQL – kommando”) overalt som skilletegn for linjer, der indeholder SQL – kommandoer. Dette sikrer, at ingen $-variabel ved et uheld interpoleres (dvs. erstattet af dens værdi), og øger scriptsikkerheden.

Kommandoen CREATE DATABASE-databaseoprettelse er kun tilgængelig for superbrugeren, og på de fleste hostingsider er det umuligt for en simpel bruger at udføre den. Den er kun tilgængelig for serveradministratoren.

Til eksperimenter, lad os oprette en testbasedatabase ved at udføre en SQL-forespørgsel fra kommandolinjen. For at gøre dette skal du logge ind på MySQL og indtaste MySQL-kommandolinjen:

mysql> opret database testbase;

Herefter skal du skrive:

mysql>brug testbase;

Database oprettet:


1.4 Valg af database. Fungeremysql_select_db

Inden vi sender den første anmodning til MySQL-serveren, skal vi angive, hvilken database vi skal arbejde med. Mysql_select_db-funktionen er designet til dette:

bool mysql_select_db(streng $databasenavn [,ressource $link_identifier])

Det giver PHP besked om, at fremtidige operationer på $link_identifier-forbindelsen vil bruge databasen $database_name.

Brug af denne funktion svarer til at kalde brugskommandoen i en SQL-forespørgsel, dvs. funktionen mysql_select_db vælger en database til videre arbejde, og alle efterfølgende SQL-forespørgsler anvendes til den valgte database. Funktionen tager som argumenter navnet på den valgte database databasenavn ogen. Funktionen returnerer sand, hvis handlingen var vellykket og ellers falsk:

//Databaseforbindelseskode

if (! @mysql_select_db($dbname, $dbcnx))

//Vis en advarsel

ekko("

Databasen er i øjeblikket ikke tilgængelig, så siden kan ikke vises korrekt.");

1.5 Fejlhåndtering

Hvis der opstår fejl under arbejdet med MySQL (for eksempel er parenteserne i forespørgslen ikke afbalancerede, eller der er ikke nok parametre), så kan fejlmeddelelsen og dens nummer fås ved hjælp af de to funktioner, der er beskrevet nedenfor.

Det er vigtigt at bruge disse funktioner omhyggeligt og hurtigt, for ellers kan fejlfinding af scripts blive sværere.

● Funktion:

int mysql_errno()

returnerer nummeret på den sidst rapporterede fejl. Forbindelsesidentifikatoren $link_identifier kan udelades, hvis der kun blev etableret én forbindelse under scriptets udførelse.

● Funktion:

streng mysql_error()

returnerer ikke et tal, men en streng, der indeholder teksten i fejlmeddelelsen. Det er praktisk at bruge til debugging formål. Normalt bruges mysql_error sammen med eller die()-konstruktionen, for eksempel:

@mysql_connect("localhost", "bruger", "adgangskode")

or die("Fejl ved forbindelse til databasen: ".mysql_error());

@-operatøren tjener som sædvanligt til at undertrykke den standardadvarsel, der kan opstå i tilfælde af en fejl.

I nyere versioner af PHP bliver advarsler i MySQL-funktioner ikke logget som standard.

1.6 Automatisering af forbindelse til MySQL. Fil (config.php)

Typisk er der flere scripts på et websted, der skal have adgang til den samme database.

Det anbefales at adskille koden, der er ansvarlig for at oprette forbindelse til MySQL, i en separat fil, og derefter forbinde den til de nødvendige scripts ved hjælp af include-funktionen.

Det giver mening at placere funktionerne til at forbinde, vælge og oprette en database i samme fil (config.php), hvor variablerne med servernavn $dblocation, brugernavn $dbuser, adgangskode $dbpasswd og databasenavn $dbname er deklareret:

config.php liste:

//config.php-koden for filen, der indeholder parametre til at oprette forbindelse til serveren og vælge en database

//udsender forbindelsesfejlmeddelelser til browseren

$dblockation = "localhost"; //Server navn

$dbname = "indsæt databasenavn" //Databasenavn: oprettes eller eksisterer

$dbuser = "rod"; //Database brugernavn

$dbpasswd = ""; //Adgangskode

//Opret forbindelse til databaseserveren

//Undtryk fejloutput med @-symbolet, før funktionen kaldes

$dbcnx=@mysql_connect($dblocation,$dbuser,$dbpasswd);

if (!$dbcnx) //Hvis deskriptoren er 0, er forbindelsen til databaseserveren ikke etableret

//Vis en advarsel

ekko("

Databaseserveren er i øjeblikket ikke tilgængelig, så siden kan ikke vises korrekt.

");

//Opret databasen $dbname - kun en superbruger kan gøre dette

//Hvis databasen allerede eksisterer, vil der være en ikke-fatal fejl

@mysql_query("OPRET DATABASE, hvis den ikke eksisterer $dbname');

//Forbindelseskode til databasen: vi foretager et entydigt valg af en nyoprettet database eller en allerede eksisterende database

//Undtryk fejloutput med @-symbolet, før funktionen kaldes

if(!@mysql_select_db($dbname, $dbcnx)) //Hvis deskriptoren er 0, er forbindelsen til databasen ikke etableret

//Vis en advarsel

ekko("

Databasen er i øjeblikket ikke tilgængelig, så siden kan ikke vises korrekt.

");

//Lille hjælpefunktion, der udskriver en besked

//fejlmeddelelse i tilfælde af databaseforespørgselsfejl

function puterror($message)

ekko("");


2. UDFØRELSE AF DATABASE FORESPØRGSEL

2.1 Oprettelse af en tabel. FungereOPRET TABEL:

OPRET TABEL Tabelnavn (feltnavntype, feltnavntype)

Denne kommando opretter en ny tabel i databasen med kolonner (felter) defineret af deres navne (FieldName) og specificerede typer. Når du har oprettet tabellen, kan du tilføje poster til den, der består af de felter, der er angivet i denne kommando.

Liste test_11.php. Et program, der opretter en ny tabel i en database:

inkludere "config.php";//Opret forbindelse til serveren og vælg en database

mysql_query("OPRET TABEL, hvis der ikke findes personer

id INT AUTO_INCREMENT PRIMÆR NØGLE,

eller die("MySQL-fejl: ".mysql_error());


Dette script opretter et nyt bord med to felter. Det første felt har typen INT (heltal) og navne-id. Den anden er TEXT-typen (tekststreng) og navnenavnet.

Hvis tabellen eksisterer, vil konstruktionen eller die() fungere.

Den valgfrie if not exists-sætning, når den er angivet, fortæller MySQL-serveren, at den ikke skal generere en fejlmeddelelse, hvis en tabel med det angivne navn allerede findes i databasen.

Teksten bruger en oversættelse af officiel dokumentation lavet af den all-russiske klub af webmastere.

Alt arbejde med databaser handler om at oprette forbindelse til serveren, vælge en database, sende en anmodning, behandle anmodningen og afbryde forbindelsen til databaserne. Så lad os se på det hele punkt for punkt. For klarhed over hele teksten, lad os forestille os, at en MySQL-server er installeret på den lokale maskine. Porten til at arbejde med den er standard. For at oprette forbindelse bruger vi brugernavnet "root" og adgangskoden "no_one".

Forbindelse

Forbindelse til databasen foretages ved hjælp af funktionen "mysql_connect()". Det videregives tre parametre: servernavn (eller servernavn:forbindelsesport), brugernavn og adgangskode. Hvis et andet kald til "mysql_connect()" foretages med de samme argumenter, vil der ikke blive etableret nogen ny forbindelse - i stedet vil forbindelses-id'et for den allerede åbne forbindelse blive returneret (dvs. arbejdet fortsætter med den samme database). Hvis du kun arbejder med én database, behøver du ikke oprette et forbindelses-id. Når scriptet er færdig med at udføre, vil forbindelsen til serveren blive lukket, medmindre den eksplicit blev lukket af et tidligere kald til "mysql_close()".

Eksempel: $connect = mysql_connect('localhost', 'root', 'no_one'); I dette tilfælde er $connect-variablen forbindelsesidentifikatoren. Hvis du kun arbejder med én database, skrives koden uden en identifikator: mysql_connect('localhost', 'root', 'no_one');

Valg af en database

"mysql_select_db" - vælger en MySQL-database. Det betyder, at serveren ikke må indeholde én database, men flere. Med denne kommando vil vi vælge den, vi har brug for (som vi har rettighederne til). Parameteren for denne funktion er navnet på databasen. Den på denne måde valgte database bliver aktiv og er knyttet til en bestemt identifikator. Hvis forbindelses-id'et ikke er defineret, bruges den sidste forbindelse til databasen.

Eksempel: mysql_select_bd('test', $connect); - hvor test er databasenavnet og $connect er forbindelsesidentifikator. Hvis du kun arbejder med én database, skrives koden uden en identifikator: mysql_select_bd('test');

Sender en anmodning

mysql_query() sender en forespørgsel til den database, der aktuelt er aktiv på serveren, som er knyttet til et specifikt link-id. Hvis der ikke er angivet et ID, bruges den sidst åbne forbindelse. Parameteren for denne funktion er en streng med en sql-forespørgsel.

Eksempel: $tmp=mysql_query("vælg * fra tabel", $connect); - denne kommando vil returnere hele indholdet af tabeltabellen fra den aktive database, der peges på af $connect identifikatoren. Hvis du kun arbejder med én database, skrives koden uden en identifikator: $tmp=mysql_query(“vælg * fra tabel”);

Behandler anmodning

Der er flere funktioner til behandling af anmodninger. Valget af en eller anden metode til behandling af anmodninger afhænger af programmeringsstilen og den aktuelle opgave. Det skal også tages i betragtning, at forskellige muligheder "indlæser" serveren på forskellige måder (nogle meget, nogle ikke så meget). Lad os se på et par af dem.
mysql_fetch_object - returnerer et php-objekt som et behandlingsresultat. Denne metode er god for dem, der er vant til objektprogrammering
Eksempel: while($result= mysql_fetch_object($tmp)) echo($result->name);

mysql_fetch_array - Hent resultatet som en associativ matrix. Denne metode er god til begyndere (selvom det afhænger af, hvem der vil kunne lide den mere).

Lukning af en forbindelse

Forbindelsen lukkes ved hjælp af mysql_close()-funktionen. Dens parameter err. Hvis denne parameter ikke er angivet, lukkes den sidst kaldte forbindelse.

Fejl er banebrydende for ethvert program. Jo større projektet er, jo sværere er det at rette og finde fejl. Men det vigtigste i processen med at arbejde med et program er programmørens kvalifikationer og hans ønske om at skrive korrekt og nøjagtig kode indeholdende et minimumsbeløb...

Bruger php...

At skabe en forbindelse på forskellige måder:

1) den gammeldags måde at oprette forbindelse til MySQL på:

$conn=mysql_connect($db_hostname, $db_username, $db_password) eller dø ("Ingen forbindelse til serveren");
mysql_select_db($db_database,$conn) eller die ("Nej, det var ikke muligt at oprette forbindelse til databasen");

Forklaringer af variablerne nedenfor.

Følgende funktioner bruges:

  • mysql_connect()- at oprette forbindelse til serveren;
  • mysql_select_db()- at oprette forbindelse til databasen;

Samtidig tjekker vi konstant for fejl på denne måde: eller dør ("Fejlen er sådan og sådan"); - oversat som eller dø med sådan og sådan en fejl - for straks at finde ud af, hvor fejlen er.

config.php

// variabler til at forbinde til databasen
$host = "localhost"; /vært
$brugernavn = "rod"; // adgangskode til at oprette forbindelse til databasen
$password = ""; // adgangskode til at oprette forbindelse til databasen - på den lokale computer kan den være tom.
$database_name = "min-dolgi"; // databasenavn

// gammel måde at oprette forbindelse til databasen på
mysql_connect($host, $brugernavn, $password) eller die("Kan ikke oprette forbindelse oprette forbindelse");

// vælg databasen. Hvis der er en fejl, output
mysql_select_db($database_name) eller die(mysql_error());

index.php

require_once "config.php";


$result = mysql_query("SELECT Name, Money FROM Dolg BESTILLING BY Money DESC LIMIT 5") eller die(mysql_error());



";


mens ($row = mysql_fetch_assoc($result)) (
";
}


mysql_free_result($result);

// Luk forbindelsen
mysql_close();

2) En mere progressiv proceduremæssig stil - tilslutning til databasen ved hjælp af mysqli:

Denne metode:

  1. praktisk;
  2. op til 40 gange hurtigere;
  3. øget sikkerhed;
  4. der er nye funktioner og funktioner;

Et eksempel på tilslutning til en database i PHP med et udvalg fra en tabel

config.php

// forbindelser til databasen
$link = mysqli_connect("localhost", "brugernavn", "adgangskode", "navne-database"); // her indtaster vi dine data direkte: brugernavn, adgangskode og databasenavn, det første felt er normalt localhost

// udgangsforbindelsesfejl
hvis (!$link) (
echo "Fejl ved forbindelse til databasen. Fejlkode: " . mysqli_connect_error();
Afslut;
}

Bemærk venligst - mysqli bruges overalt, ikke mysql!!!

index.php

require_once "config.php";

// Udfør anmodningen. Hvis der er en fejl, viser vi den
hvis ($resultat = mysqli_query($link,"VÆLG Navn, Penge FRA Debt ORDRE BY Money DESC LIMIT 5")) (

Echo "Hvem skylder jeg i faldende rækkefølge:

";

// Henter forespørgselsresultater
mens ($række = mysqli_fetch_assoc($result)) (
echo $row["Navn"] . "med gæld". $row["Penge"] . " rubler.
";
}

// frigør brugt hukommelse
mysqli_free_result($resultat);

// Luk forbindelsen
mysqli_close($link);
}

Som du kan se, er nogle punkter ændret (i kursiv).

3) Objektorienteret metode til at oprette forbindelse til en MySQL-database - ved hjælp af metoder og klasser:

Ulemper: Mere kompleks og mindre modtagelig for fejl.

Fordele: Korthed og bekvemmelighed for erfarne programmører.

$conn = new mysqli($db_værtsnavn, $db_brugernavn, $db_adgangskode, $db_database);
if($conn->connect_errno)(
die($conn->connect_error);
) else (ekko "Forbindelsen til databasen blev etableret";)

her er alt i princippet intuitivt:

  • $db_værtsnavn er vært(for det meste lokal vært),
  • $db_database - db navn;
  • $db_username og $db_password - henholdsvis brugernavn og adgangskode!

Et eksempel på tilslutning til en database i php OOP-stil med sampling fra en tabel

config.php

// forbindelser til databasen
$mysqli = new mysqli("localhost", "brugernavn", "adgangskode", "navne-database"); // her indtaster vi dine data direkte: brugernavn, adgangskode og databasenavn, det første felt er normalt localhost

// udgangsforbindelsesfejl
if ($mysqli->connect_error) (
die ("DB-forbindelsesfejl: (" . $mysqli->connect_errno . ") " . mysqli_connect_error) ;
}

Bemærk venligst - mysqli bruges overalt, ikke mysql!!! og i modsætning til den forrige metode, vises pile "->", som indikerer, at dette er en OOP-stil.

index.php

require_once "config.php";

// Udfør anmodningen. Hvis der er en fejl, viser vi den
if ($resultat = $ mysqli->forespørgsel("SELECT Name, Money FROM Debt ORDER BY Money DESC LIMIT 5")) (

Echo "Hvem skylder jeg i faldende rækkefølge:

";

// Henter forespørgselsresultater
mens ($row = $result-> hente_assoc()) {
echo $row["Navn"] . "med gæld". $row["Penge"] . " rubler.
";
}

// frigør brugt hukommelse
$resultat->luk();

// Luk forbindelsen
$mysqli->luk();
}

Din opgave er at finde forskellene.

4) Kommunikation med databasen ved hjælp af PDO:

Når der oprettes forbindelse til en MySQL-database, bruges forberedte udtryk (ved hjælp af prepare-metoden) og som følge heraf øges sikkerheden og ydeevnen markant.

konfigurationsfil fra den tidligere metode! - samme

index.php

// PDO-stil til kommunikation med MySQL
if ($stmt = $mysqli->prepare("VÆLG Navn, Voney FRA Dolg BESTIL VED PENGE< ? LIMIT 5")) {

$stmt->bind_param("i", $summa);
$summa = 100.000;

//start udførelse
$stmt->execute();

// Erklæring af variabler for forberedte værdier
$stmt->bind_result($col1, $col2);

Echo "Hvem skylder jeg i faldende rækkefølge:

";

// Henter forespørgselsresultater
while ($stmt->fetch()) (
echo $col1 . "med gæld". $col2. " rubler.
";
}

// frigør brugt hukommelse
$stmt->close();

// Luk forbindelsen
$mysqli->close();

Som du kan se, er det meget mere kompliceret her, og du skal studere PDO - dette er et separat emne.

I denne artikel vil vi se på måder at få adgang til MySQL-databasetabeller ved hjælp af SQL-forespørgselssproget. SQL er et akronym, der kaldes "struktureret forespørgselssprog".
I PHP-sproget er der en række funktioner med præfikset "mysql" til dette formål. Vi behøver ikke mange af dem til at behandle anmodninger. En funktion, uden hvilken det ville være umuligt at udføre SQL-forespørgsler i PHP:

Ressource mysql_query(forespørgsel)

Denne funktion sender en anmodning til databasen og returnerer ressource-id'et, hvis anmodningen lykkes.
For at oprette forbindelse til MySQL-databasen skal du udføre følgende sekvens:

$host="localhost"; // værtsnavn (bekræftes med udbyderen) $database="db_name"; // navn på databasen du skal oprette $user="brugernavn"; // brugernavn angivet af dig, eller defineret af udbyderen $pswd="your_pass"; // adgangskoden du har angivet $dbh = mysql_connect($host, $user, $pswd) or die("Kan ikke oprette forbindelse til MySQL."); mysql_select_db($database) or die("Jeg kan ikke oprette forbindelse til databasen.");

mysql_connect()- en funktion til at oprette forbindelse til en MySQL-server på din hosting.
EN mysql_select_db() vælger en database på serveren at oprette forbindelse til.
Vi forbinder med andre ord til serveren, vælger en database og begynder at arbejde.
Die()-funktionen kaldes, hvis der opstår en fejl, og viser den meddelelse, du har angivet i browservinduet.
For at afslutte arbejdet med databaser, brug funktionen:

Mysql_close($dbh);

Her $dbh- deskriptor, der blev returneret af funktionen ved forbindelse mysql_connect.
Efter at have afsluttet den indledende gennemgang, lad os begynde at se på de faktiske SQL-forespørgsler.
For at gøre dette skal du først og fremmest oprette en database med et bestemt navn. Og lav en tabel i den, også med et bestemt navn. I vores eksempler vil vi henvise til tabellen min_sql_tabel. For at oprette denne tabel, lad os køre følgende forespørgsel i phpmyadmin på vores lokale vært:

CREATE TABLE `my_sql_table` (`id` INT NOT NULL , // identifikator for fremtidige tabelposter `firstname` VARCHAR(50) NOT NULL , // tekstfelt VARCHAR `surname` VARCHAR(50) NOT NULL , // max længde 50 tegn PRIMARY KEY (`id`) // primærnøgle - identifikator id);

Så bordet er lavet. Lad os udføre den første anmodning, som vi straks vil formatere i form af PHP-kode:

\n"; echo "Navn: ".$row["fornavn"]."
\n"; echo "Efternavn: ".$row["efternavn"]."


\n"; ) ?>

Lad os analysere filens PHP-kode firstsql.php. Lad os starte med selve forespørgslen til databasetabellerne.

$query = "VÆLG * FRA `min_sql_table`";

Denne forespørgsel kan dechifreres som følger: vælg fra tabel min_sql_tabel DB alle poster fra alle felter. Denne vej tegn * efter ordet SELECT betyder "vælg absolut alt." Så anmodningen er oprettet. Nu skal du udføre det:

$res = mysql_query($query);

Hvis anmodningen er vellykket, vil funktionen mysql_query() vil returnere os ressource-id'et $res.
Vi skal videregive det som en parameter til funktionen mysql_fetch_array(). Navnet på denne funktion taler for sig selv. De der. den danner og udsender et array baseret på et eksempel fra databasetabellen. I tilfældet med vores tabel vil arrayet bestå af et antal elementer svarende til antallet af poster (rækker) i tabellen og indeholde værdier id, fornavn, efternavn for hver række i tabellen. Derfor følgende kode:

While($row = mysql_fetch_array($res)) ( echo "Nummer: ".$row["id"]."
\n"; ekko "Navn:".$row["fornavn"]."
\n"; echo "Efternavn:".$row["efternavn"]."


\n"; )

kan kommenteres sådan her: mens $row-variablen, vi introducerede, modtager resultater, der ikke er nul fra funktionen mysql_fetch_row du skal udlæse feltværdierne til browseren $row["id"], $row["fornavn"], $row["efternavn"] ved hjælp af ekko.
Hvis anmodningen udføres sådan:

$query = "VÆLG fornavn FRA `my_sql_table`";

så vil dette betyde, at fra alle rækker kun værdierne i fornavnsfeltet er valgt.
Derfor skal den tidligere kode omskrives som:

$res = mysql_query($query); while($row = mysql_fetch_array($res)) ( ekko "Navn:".$row["fornavn"]."
\n"; )

Hvis du vil vælge tabelrækker med en bestemt værdi id hvor efternavnet skal stå Petrov, så vil anmodningen blive omskrevet som følger:

$query = "VÆLG id FRA `my_sql_table` hvor efternavn="Petrov"";

Men hvis du har brug for at finde ud af efternavnet på den person, der er nummereret, for eksempel 5, så vil anmodningen være sådan:

$query = "VÆLG efternavn FRA `my_sql_table` hvor id=5";

I dette tilfælde ved du, at resultatet af forespørgslen kun vil være én række fra tabellen. De der. der er ingen mening i at organisere en loop vha mens. Og anmodningsbehandlingen vil være som følger

$res = mysql_query($query); $række = mysql_fetch_row($res); echo "Efternavnet på den femte person på listen er ".$row."\n";

Her brugte vi i stedet for mysql_fetch_array() mysql_fetch_row(). De der. få værdien af ​​et felt (eller felter) i en bestemt række. Da vi havde et felt - efternavn - kan vi henvise til det eneste element i $row-arrayet som $række;.

Så lad os se på de mest typiske eksempler på MySQL-forespørgsler. Vi vil foretage gennemgangen ud fra tabellen min_sql_tabel:
1. Tilføj et mellemnavn (mellemnavn) felt til tabellen my_sql_table efter efternavn:

$query = "ÆNDRINGSTABEL `my_sql_table` TILFØJ `mellemnavn`
VARCHAR(50) IKKE NULL EFTER `efternavn`";

2. Lad os nu fjerne efternavnsfeltet fra tabellen my_sql_table:

$query = "ÆNDRINGSTABEL `my_sql_table` DROP `efternavn`";

3. Slet poster fra tabellen my_sql_table med efternavnet Sidorov:

$query = "SLET FRA `my_sql_table` hvor efternavn="Sidorov"";

4. Ud over lighedstegn, også "større end" eller "mindre end", er der i MySQL-forespørgselssproget konceptet " svarende til". Lad os vælge poster fra tabellen my_sql_table, hvor efternavnet indeholder " dor" :

$query = "VÆLG * FRA `my_sql_table` hvor efternavn som "%dor%"";

Her er tilstedeværelsen" % " i begyndelsen og slutningen af ​​"dor" og betyder, at forespørgslen vil lede efter præcis "dor", og det er lige meget, om det er i begyndelsen, slutningen eller midten af ​​efternavnet. Overvej følgende eksempel
5. Vælg poster fra tabellen my_sql_table med et efternavn, der begynder med P. Bemærk venligst placeringen" % ":

$query = "VÆLG * FRA `my_sql_table` hvor efternavn som "P%"";

6. Beregn den maksimale værdi id:

$query = "VÆLG MAX(id) FRA `min_sql_tabel`";

7. Beregn antallet af felter i my_sql_table med et efternavn, der begynder med P.

$query = "VÆLG ANTAL(*) FRA `my_sql_table` hvor efternavn som "P%"";

8. Sletning af tabellen my_sql_table:

$query = "DROP TABEL `min_sql_tabel`";

For forespørgsler 1-3 i PHP skal du blot køre forespørgslen:

Mysql_query($query);

Vi så på de mest typiske eksempler på anmodninger. Jeg tror, ​​at du med deres hjælp, efter elementær logik, vil være i stand til at udføre mere komplekse forespørgsler mod de MySQL-databasetabeller, du har oprettet.




Hvis du har andre spørgsmål eller noget er uklart - velkommen til vores

Vi lærte, hvordan man opretter forbindelse til MySQL-serveren, vælger en database at arbejde med, lærte PHP-funktionen til at sende forespørgsler til MySQL-serveren, lærte to simple forespørgsler (oprettelse og sletning af en tabel) og lærte, hvordan man lukker forbindelsen.

Nu vil vi dykke dybere ned i MySQL-forespørgsler. Så lad os komme i gang!

Oprettelse af en tabel - CREATE TABLE

Nu har vi en tom database, der er ingen tabeller i den. Så først laver vi en tabel. Vi ved allerede, hvordan man gør dette fra første del.

Her er scriptkoden, der vil skabe det tegn, vi har brug for:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Fejl"); $query = "OPRET TABLE-brugere(login VARCHAR(20), adgangskode VARCHAR(20))"; if (mysqli_query($link, $query)) echo "Tabellen er blevet oprettet."; else echo "Tabel ikke oprettet: ".mysqli_error(); mysqli_close($link);

Vores tabel har kun to felter: login og adgangskode. For nu har vi ikke brug for mere, lad os ikke komplicere processen.

Så bordet er lavet.

Tilføjelse af rækker (poster) til en tabel - INSERT

Du kan tilføje en ny række til en tabel ved hjælp af kommandoen SQL insert. Her er et eksempel:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Fejl"); $query = "INDSÆT I brugere (login, adgangskode) VÆRDI ("zeus", "pass123""); if (mysqli_query($link, $query)) echo "Bruger tilføjet."; else echo "Bruger ikke tilføjet: " . mysqli_error(); mysqli_close($link);

En SQL-forespørgsel består af kommandoen INSERT INTO, databasenavnebrugerne, derefter feltnavnene i parentes, derefter ordet VALUE, efterfulgt af de værdier, der skal tilføjes i parentes. Værdier er sat i anførselstegn.

Anmodningssyntaksen ser sådan ud:

INDSÆT I tabelnavn (kolonne1, kolonne2) VÆRDI ("x1", "x2")

Anførselstegn i anden parentes er påkrævet.

I stedet for værdier kan der være variabler. Her er et eksempel:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Fejl"); $login = "zeus"; $password = "pass123"; $query = "INDSÆT I brugere (login, adgangskode) VÆRDI ("$login", "$password""); if (mysqli_query($link, $query)) echo "Bruger tilføjet."; else echo "Bruger ikke tilføjet: " . mysqli_error(); mysqli_close($link);

Selvfølgelig giver dette eksempel ikke meget mening. Det kan være nyttigt for begyndere at høre, at det er sådan logins og adgangskoder, som brugerne oplyser under registreringen, registreres i databasen. Disse data lagres i variabler og derefter, efter verifikation, skrevet til databasen.

Der er en hurtig måde at indsætte flere rækker med én INSERT-sætning:

INDSÆT I brugere (login, adgangskode) VÆRDI ("bob", "eee333"), ("Rooki", "12345"), ("magy", "olol88e8")

Som du kan se, er de anførte data blot adskilt af kommaer.

Så ved at bruge INSERT-kommandoen lærte vi, hvordan man tilføjer poster til en tabel. Fortsæt.

Se tabel: SELECT-kommando

Nu har vi en brugertabel, der har rækker. Det forrige script kan køres flere gange, og hver gang vil det tilføje en række til tabellen. Nu ved vi måske ikke, hvor mange rækker vi har i tabellen. Og jeg vil gerne vide, hvad vi har skrevet i den.

For at hente data fra en tabel skal du bruge kommandoen SELECT SQL. * tegnet betyder, at vi anmoder om alle data, så efter ordet FROM skriver vi navnet på den tabel, som vi ønsker at hente data fra.

Lad os forespørge alle data fra brugertabellen:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Fejl"); $query = "VÆLG * FRA brugere"; $result = mysqli_query($link, $query); if (!$result) echo "Der opstod en fejl: " . mysqli_error(); andet ekko "Data modtaget"; mysqli_close($link);

Funktionen mysqli_query() returnerede forespørgselsresultatidentifikatoren til os - vi sætter den i en variabel og vil senere arbejde med den ved hjælp af andre PHP-funktioner.

Antal poster i anmodningen

Lad os bestemme, hvor mange linjer der er i vores forespørgsel? Jeg kørte scriptet til at tilføje en post til tabellen, jeg kan ikke huske hvor mange gange, og nu ved jeg ikke, hvor mange rækker der er i min tabel.

Brug funktionen mysqli_num_rows() for at bestemme antallet af rækker i resultatet af en forespørgsel. Denne funktion videregives identifikatoren for forespørgselsresultatet, og den returnerer antallet af poster.

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Fejl"); $query = "VÆLG * FRA brugere"; $result = mysqli_query($link, $query); if (!$result) echo "Der opstod en fejl: " . mysqli_error(); andet ekko "Data modtaget"; $count = mysqli_num_rows($result); echo "Total rækker i tabellen: $count."; mysqli_close($link);

Hvis vi skal finde ud af antallet af poster i tabellen, er ovenstående metode ikke den mest egnede. Her fandt vi ud af antallet af poster fundet i forespørgslen, men antallet af poster i tabellen søges forskelligt.

Antal poster i tabellen VÆLG ANTAL(*)

For at finde ud af antallet af poster i en tabel, kan du bruge kommandoen SELECT COUNT(*) FROM table_name.

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Fejl"); mysqli_select_db("tester"); $query = "VÆLG * FRA brugere"; $result = mysqli_query($link, $query); if (!$result) echo "Der opstod en fejl: " . mysqli_error(); else echo "Data modtaget."; $count = mysqli_fetch_row($result); echo "Total rækker i tabellen: $count."; mysqli_close($link);

Bemærk venligst, at vi her brugte den nye PHP-funktion mysqli_fetch_row() til at hente dataene. Denne funktion returnerer en række af forespørgselsresultatet i form af et simpelt array; i vores tilfælde er der et felt i rækken, og det har indeks 0.

Visning af resultatet af en forespørgsel i en løkke

Efter at have udført en SQL-forespørgsel med en SELECT-kommando og opnået forespørgselsresultat-id'et, opretter PHP en intern pointer i resultatpostsættet. Denne markør flytter automatisk til den næste post efter adgang til den aktuelle post. Denne mekanisme gør det meget praktisk at gå gennem resultatsættet af en SELECT-forespørgsel.

PHP har flere funktioner, som du kan bruge til at få et array bestående af dets felter for hver linje i den resulterende forespørgsel. Lad os for eksempel tage funktionen mysqli_fetch_row() . Denne funktion videregives anmodnings-id'en og returnerer et array. Så i en løkke ses hele forespørgselsresultatet, og når slutningen af ​​forespørgselsresultatet er nået, vil funktionen returnere false .

Så vi forespørger alle data fra brugertabellen (SELECT * FROM brugere).


"; while ($row = mysqli_fetch_row($result)) ( echo "Login: $row. Adgangskode: $row.
"; ) mysqli_close($link);

Funktionen mysqli_fetch_row() returnerer en simpel matrix. I hver iteration af løkken vil vi modtage et array med en række fra tabellen, hvis felter vi kan få adgang til ved at angive et numerisk indeks.

Det samme kan gøres ved at bruge mysql_fetch_assoc()-funktionen, den returnerer et associativt array.

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Fejl"); mysqli_select_db("tester"); $result = mysqli_query($link, "VÆLG * FRA brugere"); if (!$result) echo "Der opstod en fejl: " . mysqli_error(); andet ekko "Data modtaget.
"; while ($row = mysqli_fetch_assoc($result)) ( echo "Login: $row. Adgangskode: $row.
"; ) mysqli_close($link);

Der er også funktioner mysqli_fetch_array() - returnerer enhver type array, og mysqli_fetch_object() - returnerer et objekt.

SELECT DISTINCT-forespørgsel - unikke feltværdier

Lad os oprette en ny tabel:

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Fejl"); mysqli_select_db("tester"); // slet den eksisterende tabel mysqli_query($link, "DROP TABLE-brugere"); // create a new table $query = "CREATE TABLE user(navn VARCHAR(20), efternavn VARCHAR(20), alder TINYINT USIGNED)"; if (mysqli_query($link, $query)) echo "Tabellen er blevet oprettet.
"; else echo "Tabel ikke oprettet: " . mysqli_error(); // funktion til at tilføje poster til tabelfunktionen add_new_line($link, $query) (if (!mysqli_query($link, $query)) echo "Bruger ikke tilføjet : " . mysqli_error(); ) // tilføje poster add_new_line($link, "INSERT INTO users (navn, efternavn, alder) VALUE ("Max", "Jayson", "33")"); add_new_line($link , "INDSÆT I brugere (navn, efternavn, alder) VALUE ("Bob", "Freeman", "26")"); add_new_line($link, "INSERT INTO brugere (navn, efternavn, alder) VALUE ("Sara" , "Lopes", "65")"); add_new_line($link, "INDSÆT I brugere (navn, efternavn, alder) VALUE ("Serg", "Pupin", "29")"); add_new_line($link, "INDSÆT I brugere (navn, efternavn, alder) VÆRDI ("Serg", "Borman", "43")"); add_new_line($link, "INDSÆT I brugere (navn, efternavn, alder) VÆRDI ("Max", " Lopes", "21")"); // vis indholdet af tabellen i browseren $result = mysqli_query($link, "SELECT * FROM users"); if (!$result) echo "Der opstod en fejl: " . mysqli_error(); else echo "Data modtaget.
"; while ($row = mysqli_fetch_assoc($result)) ( echo "Fornavn: $row. Efternavn: $row. Alder: $row.
"; ) mysqli_close($link);

Så vi har en ny, mere kompleks tabel med unikke optegnelser. Lad os nu se, hvor mange navne vi har i databasen.

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Fejl"); mysqli_select_db("tester"); $result = mysqli_query($link, "VÆLG DISTINKT navn FRA brugere"); echo "Samlede navne: " . mysqli_num_rows($result)."
"; echo "Liste over navne:
"; mens ($navn = mysqli_fetch_row($result)) ( ekko "$navn
"; ) mysqli_close($link);

SQL-forespørgslen "SELECT DISTINCT name FROM users" returnerede et resultat med alle de unikke navne i vores tabel. Hvert unikke navn i en ny række i forespørgselsresultatet.

Sortering af resultatet - BESTIL EFTER

Ved at tilføje kommandoen ORDER BY til SQL-forespørgslen sorterer vi forespørgselsresultatet i stigende rækkefølge (tal og bogstaver i alfabetisk rækkefølge). Her er et eksempel, hvor du kan sammenligne en almindelig forespørgsel og en sorteret efter alder (aldersfelt).



"; ) echo "Sortér efter alder:
"; $result = mysqli_query($link, "SELECT * FROM users ORDER BY age"); while ($line = mysqli_fetch_row($result)) ( echo "Fornavn: $line. Efternavn: $line. Alder: $ linje.
"; ) mysqli_close($link);

Du kan erstatte aldersfeltet i ORDER BY kommandoen med navnefeltet og se resultatet.

For at sortere forespørgselsresultatet i omvendt rækkefølge skal du bruge kommandoen ORDER BY age DESC.

Matchende stand - HVOR

Ved at tilføje WHERE-kommandoen til SQL-forespørgslen vil vi kun forespørge på de poster, der opfylder betingelsen. Lad os f.eks. lave en anmodning til personer under 30 år.

For at gøre dette bruger vi SQL-forespørgslen "SELECT * FROM users WHERE age

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Fejl"); mysqli_select_db("tester"); ekko "Folk under 30:
"; $result = mysqli_query($link, "VÆLG * FRA brugere WHERE alder<30"); while ($line = mysqli_fetch_row($result)) { echo "Имя: $line. Фамилия: $line. Возраст: $line.
"; ) mysqli_close($link);

Vi kan også straks sortere resultatet i stigende aldersrækkefølge:
" VÆLG * FRA brugere WHERE alder<30 ORDER BY age ".

Hvis vi laver en forespørgsel "VÆLG navn FRA brugere WHERE alder<30 ORDER BY age ", то в результате нам вернут только значения поля "name", но они также будут отсортированы по age.

Vi kan forespørge på værdierne af to felter: "VÆLG navn, alder FRA brugere WHERE alder

Lad os nu anmode alle brugere med navnet "Max".

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Fejl"); mysqli_select_db("tester"); echo "Alle maksimale:
"; $result = mysqli_query($link, "SELECT * FROM users WHERE name="Max""); while ($line = mysqli_fetch_row($result)) ( echo "Fornavn: $line. Efternavn: $line. Alder: $line.
"; ) mysqli_close($link);

Og et andet eksempel på en forespørgsel - den vil kun vælge navne fra brugertabellen, alt undtagen Max.

VÆLG navn FRA brugere WHERE navn!="Max"

Det er alt for WHERE-forespørgslen.

Begrænsning af adgang - LIMIT

Ved at tilføje LIMIT-kommandoen til SQL-forespørgslen vil vi begrænse størrelsen af ​​resultatet.

Forespørgslen, der returnerer de første tre poster, er: " SELECT * FROM users LIMIT 3 ". Lad os se, hvordan det virker:

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Fejl"); mysqli_select_db("tester"); echo "Tabelindhold:
"; $result = mysqli_query($link, "SELECT * FROM users"); while ($line = mysqli_fetch_row($result)) ( echo "Fornavn: $line. Efternavn: $line. Alder: $line.
"; ) ekko "

De første tre poster:
"; $result = mysqli_query($link, "SELECT * FROM users LIMIT 3"); mens ($line = mysqli_fetch_row($result)) ( echo "Fornavn: $line. Efternavn: $line. Alder: $line .
"; ) ekko "

Tre andre poster:
"; $result = mysqli_query($link, "SELECT * FROM users LIMIT 3, 3"); while ($line = mysqli_fetch_row($result)) ( echo "Fornavn: $line. Efternavn: $line. Alder: $line.
"; ) mysqli_close($link);

Også her brugte vi forespørgslen: "SELECT * FROM users LIMIT 3, 3". Den anden tripel angiver forskydningen i forespørgselsresultatet.

Match mønster - LIKE

SQL-sproget understøtter simple skabeloner. For at gøre dette skal du bruge LIKE-kommandoen og angive mønsteret ved hjælp af %-symbolet.

Her er et eksempel på en forespørgsel, der returnerer alle poster med navne, der begynder med bogstavet S.

VÆLG * FRA brugere HVOR navn SOM "S%"

Jeg tester anmodningen:

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Fejl"); mysqli_select_db("tester"); echo "Tabelindhold:
"; $result = mysqli_query($link, "SELECT * FROM users"); while ($line = mysqli_fetch_row($result)) ( echo "Fornavn: $line. Efternavn: $line. Alder: $line.
"; ) ekko "

Navne der begynder med S:
"; $result = mysqli_query($link, "SELECT * FROM users WHERE name LIKE "S%""); while ($line = mysqli_fetch_row($result)) ( echo "Fornavn: $line. Efternavn: $line Alder: $line.
"; ) mysqli_close($link);

Her er et eksempel på en forespørgsel, der returnerer alle poster med efternavne, der slutter med bogstavet s.

VÆLG * FRA brugere HVOR navn SOM "%s"

Betingelse opfyldt - IN

Denne forespørgsel, der bruger IN-kommandoen, returnerer kun de rækker, der nøje matcher betingelsen.

For eksempel er vi interesserede i personer i alderen 21, 26 og 33 år.

VÆLG * FRA brugere WHERE age IN (21,26,33)

Jeg tester anmodningen:

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Fejl"); mysqli_select_db("tester"); echo "Tabelindhold:
"; $result = mysqli_query($link, "SELECT * FROM users"); while ($line = mysqli_fetch_row($result)) ( echo "Fornavn: $line. Efternavn: $line. Alder: $line.
"; ) ekko "

Personer med de påkrævede aldre (21, 26, 33):
"; $result = mysqli_query($link, "SELECT * FROM users WHERE age IN (21, 26, 33)"); mens ($line = mysqli_fetch_row($result)) ( echo "Fornavn: $line. Efternavn : $ line.Alder: $line.
"; ) mysqli_close($link);

Maksimum og minimum værdi i en kolonne

Vælger den maksimale aldersværdi i brugertabellen.

VÆLG max(alder) FRA brugere

Følgende forespørgsel vælger data fra brugertabellen ved hjælp af navne- og aldersfelterne, hvor alder tager minimumsværdien.

VÆLG navn, min(alder) FRA brugere

Opdatering af en post - OPDATERING

Lad os sætte Max Lopes alder til 15 år. Dette gøres med en MySQL-forespørgsel:

OPDATERE brugere SET age="15" WHERE name="Max" OG efternavn="Lopes"

Bemærk venligst den nye OG-kommando (og betyder "og" på engelsk) i forespørgslen. Hvis vi ikke angiver efternavnet, vil alderen på 15 år blive sat for alle Maxes i tabellen.

Du kan opdatere to eller flere felter i én række med én forespørgsel. Dette gøres som følger:

OPDATERE brugere SET alder = "18", efternavn = "Coocker" WHERE id = "3"

Vores tabel har ikke et id-felt, så denne forespørgsel fungerer ikke på den. Men vi vil helt sikkert lære dette felt, der indeholder unikke linjenumre.

Slet en post - SLET

MySQL-databaseforespørgsel for at slette en post:

SLET FRA brugere WHERE id = "10"

Igen, vores tabel har ikke et id-felt. Men vi kan fjerne alle personer under 18 år fra det.

SLET FRA brugere WHERE alder< "18"

Slet en tabel - SLET TABEL

MySQL-databaseforespørgsel, der sletter hele brugertabellen:

DROP TABLE brugere

Slet en kolonne - ALTER TABLE ... DROP ...

Nogle gange skal du muligvis fjerne en kolonne fra en tabel, lad os f.eks. fjerne alderskolonnen fra brugere:

ALTER TABLE brugere SLÅ alder

Denne MySQL-forespørgsel slettede kolonnen permanent og permanent.

Tilføj en kolonne - ALTER TABLE ... TILFØJ ...

Nogle gange kan det være nødvendigt at tilføje en kolonne til en eksisterende tabel, lad os f.eks. tilføje alderskolonnen tilbage til brugertabellen:

ALTER TABLE-brugere TILFØJ alder TINYINT USIGNET

Omdøbning af en kolonne - ÆNDRINGSTABEL ... SKIFT ...

Nogle gange skal du måske omdøbe en kolonne, for eksempel omdøbe alderskolonnen til vozrast. Vi gør det sådan her:

ÆNDRE TABEL-brugere SKIFT alder alder TINYINT USIGNET

Denne MySQL-forespørgsel omdøbte kolonnealderen til vozrast med datatypen TINYINT UNSIGNED.

Omdøbning af en tabel - RENAME TABLE ... TO ...

Nogle gange skal du måske omdøbe tabellen:

OMDØB TABLE-brugere TIL folk

Fjernelse af en database - DROP DATABASE

Denne forespørgsel kan slette databasen med navnet tester:

DROP DATABASE tester

Oprettelse af en database - CREATE DATABASE

Denne forespørgsel opretter en database med navnet tester:

OPRET DATABASE tester

Denne anmodning virker for mig i Denver, men på hosting virker den muligvis ikke, hvis databasebrugeren ikke har rettigheder til at udføre sletning.

Resultater

Så i denne del stiftede vi bekendtskab med forespørgsler til MySQL. Mange af de forespørgsler, vi undersøgte, er ikke ofte nyttige for os i arbejdet, men vi er nødt til at kende dem, da de helt sikkert vil være nyttige i processen med at udvikle scripts.

Nogle anmodninger er normalt kun lavet fra phpMyAdmin (oprettelse og sletning af databaser for eksempel).

Når du arbejder på websteder, skal du normalt tilføje en post til en tabel, redigere en post eller slette en post fra en tabel.

Det næste trin er at lære om MySQL-datatyper.