Php-lomake tietojen lisäämiseksi tietokantaan. Php pääsy mysql-tietokantaan. Käytännön esimerkkejä. Virheellinen tietotyyppi

Tämä opas näyttää sinulle, kuinka voit aloittaa tietokannan hallinnan omasta PHP käsikirjoitus. Tulet opiskelemaan tietueen lisääminen MySQL-taulukkoon, käyttämällä PHP koodi. Ennen kuin aloitat, tutustu muihin opetusohjelmiimme, jotka kattavat PHP:n ja tietokantojen käytön perusvaiheet - yhteyden muodostamisen PHP:stä MySQL-tietokantaan.

Ennen kuin aloitat, tarkista seuraavat asiat:

  • Pääsy isännöinnin ohjauspaneeliin

Vaihe 1 - Luo taulukko

Ensinnäkin meidän on luotava taulukko tiedoillesi. Tämä on hyvin yksinkertainen toimenpide, jonka voit tehdä phpMyAdmin isännöinnin ohjauspaneelista. Olemme jo käsitelleet MySQL-tietokannan luomisprosessin edellisessä opetusohjelmassa, joten ohitamme sen osan tässä.

Kun olet kirjautunut phpMyAdmin-sivulle, näet seuraavanlaisen kuvan:

Luodaan taulukko nimellä Opiskelijat tietokantaamme varten u266072517_nimi. Voit luoda uuden taulukon painikkeella Luo taulukko. Tämän jälkeen näet uuden sivun, jolle voit syöttää kaikki tarvittavat tiedot taulukkoasi varten:

Tämä on yksinkertaisin tapa luoda taulukko. Lisätietoja taulukon/tietokantarakenteesta ja kullekin kentälle käytettävistä asetuksista saat virallisesta phpMyAdminin dokumentaatiosta.

Tässä on joitain yksinkertaisia ​​selityksiä käyttämistämme kentistä:

  • Nimi on kenttäsi nimi. Näkyy taulukosi yläreunassa.
  • Tyyppi– Tässä voit asettaa kentän tyypin. Esimerkiksi me valitsemme varchar koska tähän meidän on syötettävä merkkijono, jossa on nimi (jossa on kirjaimia, ei numeroita).
  • Pituus/arvot– käytetään määrittämään tämän kentän merkinnän enimmäispituus.
  • Indeksi– Käytämme "ID"-kentässämme "Ensisijainen" -indeksiä. Taulukkoa luotaessa on suositeltavaa olla yksi ID-kenttä. Sitä käytetään indeksoimaan taulukon tietueita, kun taulukoiden välisiä suhteita on määritetty. Se voidaan myös mainita täällä "A_I", mikä tarkoittaa Automaattinen lisäys. Tämä asetus lisää indeksiä automaattisesti (1,2,3,4...).

Napsauta Tallentaa ja pöytäsi luodaan.

Vaihe 2 - Luo PHP-koodi ja lisää merkintä MySQL-taulukkoon

Vaihtoehto 1 – MySQLi-menetelmä

Ensinnäkin sinun on muodostettava yhteys tietokantaan edellisen opetusohjelman mukaisesti. Tämän jälkeen voimme jatkaa SQL-kyselyllä tietueen lisäämiseksi MySQL-taulukkoon − LISÄÄ. Tässä on täydellinen koodiesimerkki yhteys- ja lisäysmenetelmällä:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Siten koodin ensimmäinen osa (rivit 3 – 18 ) viitata tietokantayhteyden muodostamisosaan. Emme käy tätä osaa uudelleen läpi. Jos haluat tietää, mitä kukin rivi tarkoittaa, katso aiempaa oppaamme yhteyden muodostamisesta tietokantaan.

Aloitetaan rivistä 19 :

$sql = "INSERT INTO Opiskelijat (nimi, sukunimi, sähköpostiosoite) ARVOT ("Thom", "Vial", " [sähköposti suojattu]")";

Tämä on tärkein koodirivi, se tekee kaiken, mitä käsittelemme tässä opetusohjelmassa - lisäämällä tietueen tietokannan MySQL-taulukkoon. INSERT INTO on lauseke, joka lisää tietueen määritettyyn MySQL-tietokantataulukkoon. Esimerkissämme lisäämme tietoja taulukkoon Opiskelijat.

Siirryttäessä eteenpäin suluissa määrittelemme taulukon kentät, joihin lisäämme arvoja: (nimi, sukunimi, sähköpostiosoite). Tiedot lisätään tietyssä järjestyksessä. Jos kirjoitamme (sähköpostiosoite, sukunimi, nimi), arvot lisätään eri järjestyksessä.

Seuraava osa merkitystä ARVOT. Täällä asetamme arvomme aiemmin määritettyihin kenttiin. Näin jokainen kenttä saa oman arvonsa. Esimerkiksi meidän tapauksessamme se olisi jotain tällaista: nimi = Thom, sukunimi = Injektiopullo, sähköposti = [sähköposti suojattu] .

On tärkeää huomata, että täällä ollaan muodostumassa SQL-kysely PHP-koodin avulla. SQL-kyselyt tulee laittaa lainausmerkkeihin. Esimerkissämme kaikki lainausmerkkien ja $sql = jälkeen tuleva on SQL-kyselyä.

Koodin seuraava osa ( 20 – 22 rivit) suorittaa pyyntömme ja tarkistaa pyynnön onnistumisen:

If (mysqli_query($conn, $sql)) ( echo "Uusi tietue luotiin onnistuneesti"; )

Näyttöön tulee onnistumisviesti, jos kysely suoritettiin oikein.

Ja viimeinen osa ( 22 – 24 rivit) näyttää toisen viestin, jos pyyntömme epäonnistuu:

Else ( echo "Virhe: " . $sql . "
" . mysqli_error($conn); )

Tämä koodi näyttää meille virheilmoituksen, jos jokin meni pieleen.

Vaihtoehto 2 – PHP Data Object Method (P HP D data O -objekti)

Kuten edellisessä esimerkissä, meidän on ensin muodostettava yhteys tietokantaan, mikä tehdään uutta PDO-objektia luotaessa - edellinen opetusohjelma kertoo kuinka tämä tapahtuu. Koska MySQL-tietokantayhteys on PDO-objekti, meidän on käytettävä erilaisia ​​PDO-menetelmiä (eräänlaisia ​​toimintoja, jotka ovat osa tiettyä objektia) kyselyn valmistelemiseen ja suorittamiseen. Objektimenetelmiä kutsutaan seuraavasti:

$the_Object->the_Method();

PDO:n avulla voit "valmistella" SQL-koodin ennen sen suorittamista. SQL-kysely arvioidaan ja säädetään ennen suorittamista. Siten yksinkertainen SQL-injektiohyökkäys voidaan suorittaa täyttämällä SQL-koodi lomakekenttään. Esimerkiksi:

// Käyttäjä kirjoittaa tämän kirjautumislomakkeen käyttäjätunnuskenttään thom"; DROP DATABASE user_table; // Lopullisesta kyselystä tulee tämä "SELECT * FROM user_table WHERE username = thom"; DROP DATABASE user_table;

Koska SQL-koodi on syntaktisesti oikein, puolipiste tekee DROP DATABASE user_table uusi SQL-kysely ja käyttäjätaulukkosi poistetaan. Valmistetut lausekkeet eivät salli merkkejä Ja ; suorittaaksesi alkuperäisen pyynnön ja ohjeen PUDOTA TIETOKANTA ei koskaan teloiteta.

Aina Käytä valmiita kyselyitä, kun lähetät tai vastaanotat tietoja tietokannasta, jossa on SAN.

Jotta voit käyttää valmiita lausekkeita, sinun on luotava uusi muuttuja, joka kutsuu menetelmää valmistella() tietokantaobjektissa.

Oikeassa muodossa koodi näyttää tältä:

$palvelimennimi = "mysql.hostinger.com"; $tietokanta = "u266072517_nimi"; $käyttäjänimi = "u266072517_user"; $salasana = "buystuffpwd"; $sql = "mysql:host=$palvelimennimi;dbname=$tietokanta;"; $dsn_Options = ; // Luo uusi yhteys MySQL-tietokantaan käyttämällä PDO:ta, $my_Db_Connection on objektikokeilu ( $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "Yhdistetty onnistuneesti"; ) catch (PDOException $ error) ( echo "Yhteysvirhe: " . $error->getMessage(); ) // Aseta muuttujat henkilölle, jonka haluamme lisätä tietokantaan $first_Name = "Thom"; $last_Name = "Injektiopullo"; $sähköposti = " [sähköposti suojattu]"; // Täällä luomme muuttujan, joka kutsuu tietokantaobjektin preparat()-metodia // Parametriksi syötetään SQL-kysely, jonka haluat suorittaa, ja paikkamerkit kirjoitetaan seuraavasti: placeholder_name $my_Insert_Statement = $my_Db_Connection-> preparat("INSERT INTO Opiskelijat (nimi, sukunimi, sähköpostiosoite) ARVOT (:etunimi, :sukunimi, :sähköposti)" // Kerromme nyt skriptille, mihin muuttujaan kukin paikkamerkki todella viittaa käyttämällä bindParam()-metodia // Ensin); parametri on yllä olevassa käskyssä oleva paikkamerkki - toinen parametri on muuttuja, jonka tulisi viitata kohtaan $my_Insert_Statement->bindParam(:first_name, $first_Name->bindParam(:last_name, $last_Name); , $email); // Suorita kysely juuri määrittämillämme tiedoilla // Metodi execute() palauttaa TRUE, jos se on onnistunut ja FALSE, jos se ei ole, jolloin voit kirjoittaa omia viestejäsi, jos ( $my_Insert_Statement-> execute()) ( echo "Uusi tietue luotu onnistuneesti"; ) else ( echo "Tietuetta ei voida luoda"; ) // Tässä vaiheessa voit muuttaa muuttujien tietoja ja suorittaa sen uudelleen lisätäksesi dataa tietokantaan $first_Name = "John"; $last_Name = "Smith"; $sähköposti = " [sähköposti suojattu]"; $my_Insert_Statement->execute(); // Suorita uudelleen nyt, kun muuttujat ovat muuttuneet if ($my_Insert_Statement->execute()) ( echo "Uusi tietue luotiin onnistuneesti"; ) else ( echo "Tietuetta ei voida luoda"; )

Riveillä 28, 29 ja 30 käytämme menetelmää bindParam() tietokantaobjekti. On myös menetelmä bindValue(), erilainen kuin edellinen.

  • bindParam() – tämä menetelmä laskee tiedot, kun menetelmä suorittaa() saavutettu. Ensimmäisen kerran skripti saavuttaa menetelmän suorittaa() hän näkee sen $first_Name viittaa "Thomiin", sitoo tämän arvon ja suorittaa kyselyn. Kun skripti saavuttaa menetelmän toisen kerran suorittaa(), hän näyttää siltä $first_Name viittaa nyt "John", sitoo tämän arvon ja suorittaa kyselyn uudelleen uudella arvolla. On tärkeää ymmärtää, että luomme pyynnön kerran ja korvaamme sitten eri tiedot eri kohdissa skriptissä.
  • bindValue() – tämä menetelmä laskee tiedot heti, kun se saa vuoronsa. Arvosta lähtien $first_Name oli asetettu arvoon "Thom", kun saavutimme menetelmän bindValue(), sitä käytetään menetelmää kutsuttaessa suorittaa() varten $my_Insert_Statement.

Huomaa, että käytämme muuttujaa uudelleen $first_Name ja anna sille uusi arvo toisen kerran. Jos tarkistat tietokannan tämän skriptin suorittamisen jälkeen, molemmat annetut nimet ovat siellä, toisin kuin tämä muuttujan arvo $first_Name on sama kuin "John" tämän käsikirjoituksen lopussa. Muista, että PHP arvioi skriptin sisällön ennen sen suorittamista.

Jos muutat skriptiäsi korvaamalla bindParam päällä bindValue, lisäät "Thom Vial" MySQL-tietokantaan kahdesti ja John Smith ohitetaan.

Vaihe 3 – Varmista onnistuminen ja ratkaise yleiset ongelmat

Jos MySQL-tietokannassa suorittamamme kysely onnistui, näemme seuraavan viestin:

Yleisten virheiden ratkaiseminen

MySQLi

Muussa tapauksessa yllä olevan viestin sijaan näytetään virheilmoitus. Tehdään esimerkiksi yksi syntaksivirhe koodiimme ja saamme tämän:

Kuten näemme, koodin ensimmäinen osa on kunnossa, yhteys muodostettiin onnistuneesti, mutta SQL-kyselymme epäonnistui suoritettaessa.

"Virhe: INSERT INTO Opiskelijat (nimi, sukunimi, sähköpostiosoite) ARVOT ("Thom", "Vial", " [sähköposti suojattu]") Sinulla on virhe SQL-syntaksissasi. Tarkista MySQL-palvelimen versiota vastaavasta oppaasta oikea syntaksi, jota haluat käyttää lähellä "(nimi, sukunimi, sähköpostiosoite) VALUES ("Thom", "Vial", " [sähköposti suojattu]")" rivillä 1"

Tapahtui syntaksivirhe, jonka vuoksi komentosarjamme epäonnistui. Virhe oli tässä:

$sql = "INSERT INTO Opiskelijat (nimi, sukunimi, sähköpostiosoite) ARVOT ("Thom", "Vial", " [sähköposti suojattu]")";

Kuten näet, käytämme kiharoita sulkujen sijasta. Tämä on väärin ja johtaa syntaksivirheeseen komentosarjassamme.

SAN

PDO-yhteyden rivillä 7 virheenkäsittelytila ​​on asetettu "näytä kaikki poikkeukset". Jos poistat tämän skriptistä ja pyyntö epäonnistuu, et saa virheilmoitusta. Jos poikkeukset ovat käytössä, havaitut ongelmat näytetään. Tätä on yleensä parasta käyttää skriptiä kehitettäessä, koska se voi paljastaa tietokantojen ja taulukoiden nimet, jotka haluat piilottaa kaikilta, jotka voivat saada luvattoman pääsyn tietoihisi. Yllä olevassa tapauksessa, kun sulkujen sijasta käytettiin kiharoita, virhe näyttää seuraavalta:

Vakava virhe: Tavoittamaton poikkeus "PDOException" ja viesti "SQLSTATE: Syntaksivirhe tai käyttöoikeusrikkomus: 1064 SQL-syntaksissasi on virhe; tarkista MySQL-palvelimesi versiota vastaavasta käsikirjasta oikea syntaksi käytettäväksi lähellä "(nimi, sukunimi, sähköpostiosoite) VALUES ("Thom", "Vial", " [sähköposti suojattu]")" rivillä 1"

Muita ongelmia, joita saatat kohdata:

  • Kentät on määritetty väärin (olemattomia kenttiä tai väärin kirjoitetut nimet).
  • Arvon tyyppi ei vastaa kentän tyyppiä. Esimerkiksi kun haluamme määrittää luvun arvon 47 ala Nimi, saamme virheilmoituksen, koska arvon odotetaan olevan merkkijono. Mutta jos määrität luvun lainausmerkeissä, esim. “47” , ei tapahdu virhettä, koska numeromme kirjoitetaan tähän kenttään merkkijonona.
  • Yritys syöttää tietoja taulukkoon, jota ei ole olemassa, tai taulukon nimen kirjoitusvirhe.

Kaikki nämä virheet voidaan korjata noudattamalla virheenkorjausoppaita tai tarkistamalla virheloki.

Kun tiedot on lisätty onnistuneesti, meidän pitäisi nähdä ne tietokannassamme. Tässä on esimerkki taulukosta, johon lisäsimme tietomme phpMyAdmin.

Johtopäätös

Tässä opetusohjelmassa opit käyttämään PHP-koodi tietueen lisäämiseksi MySQL-taulukkoon käyttämällä MySQLi Ja SAN. Tarkastelimme myös yleisiä virheitä ja niiden ratkaisuja. PHP-koodin lisääminen MySQL-tietokantaan on hyödyllistä, olitpa sitten opettelemassa ohjelmointia tai luomassa jo omaa verkkosivustoa.

Tässä opetusohjelmassa tarkastellaan, kuinka voit lisätä tietoja tietokantaan suoraan PHP-skripteistäsi.

Tietojen lisääminen SQL:llä

Käytät SQL:ää tietojen lisäämiseen tietokantaan samalla tavalla kuin käytät SQL:ää tietokantojen ja taulukoiden luomiseen. SQL-kyselyn syntaksi on:

INSERT INTO TableName (sarake1, sarake 2, ...) ARVOT(arvo1, arvo 2,...)

Kuten näet, voit päivittää useita sarakkeita yhdessä SQL-käskyssä määrittämällä ne pilkuilla erotetussa luettelossa. Mutta tietysti voit myös määrittää vain yhden sarakkeen ja yhden arvon. Sarakkeet, joita ei mainita tässä SQL-käskyssä, pysyvät tyhjinä.

Esimerkki: Uuden henkilön lisääminen taulukkoon

Tässä esimerkissä käytämme oppitunnin 18 tietokantaa. Oletetaan, että haluamme lisätä henkilön tietokantaan. Se voisi olla Gus Goose puhelinnumeron kanssa 99887766 ja syntymäaika 1964-04-20 .

SQL-lause voi näyttää tältä:

$strSQL = "LISÄÄ ihmisiin(Etunimi,Sukunimi,Puhelin,Syntymäpäivä) ARVOT("Gus","Goose","99887766 ","1964-04-20"");

Kuten näet, SQL-käskyt voivat olla melko pitkiä, ja se voi olla helppo menettää jälkensä. Siksi on parempi kirjoittaa SQL-lause hieman eri tavalla:

strSQL = "INSERT INTO people("; strSQL = strSQL. "Etunimi"; strSQL = strSQL. "Sukunimi," strSQL = strSQL. "Puhelin," strSQL = strSQL. "syntymä"); strSQL = strSQL. "ARVOT ("; strSQL = strSQL . ""Gus", "; strSQL = strSQL. ""Hanhi", "; strSQL = strSQL. ""99887766", "; strSQL = strSQL. ""1964-04-20"");

mysql_query($strSQL) tai die(mysql_error()); Tässä SQL-lause muodostetaan jakamalla lause pieniin osiin ja yhdistämällä ne sitten muuttujaksi.

Käytännössä jommankumman menetelmän käytössä ei ole eroa, mutta suurten taulukoiden kanssa työskennellessä kyky "seurata" tulee erittäin tärkeäksi, joten valitse sopivin menetelmä.

Kokeillaan seuraavaa koodia lisätäksesi Gus Goose tietokantaan:

Tietojen lisääminen tietokantaan // Yhteys tietokantapalvelimeen mysql_connect("mysql.myhost.com", "käyttäjä", "seesami") tai kuole (mysql_error());// Valitse tietokanta mysql_select_db("omatietokanta") or die(mysql_error()); //SQL-lauseen rakentaminen $strSQL = "LISÄÄ ihmisiin("; $strSQL = $strSQL . "Etunimi"; $strSQL = $strSQL . "Sukunimi"; $strSQL = $strSQL . "Puhelin," $strSQL = $strSQL . "Syntymäpäivä"; $strSQL = $strSQL . "ARVOT("; $strSQL = $strSQL . ""Gus", "; $strSQL = $strSQL . ""Hanhi", "; $strSQL = $strSQL . ""99887766", "; $strSQL = $strSQL . ""1964-04-20""); // SQL-lause suoritetaan mysql_query($strSQL) tai kuole (mysql_error()); //Sulje yhteys mysql_close();

?>



DB päivitetty!

Tallennetaan käyttäjän syötteitä tietokantaan

Oletetaan, että sinulla on yksinkertainen lomake: Tallentaa Tämä lomake toimitetaan tiedostoon

insert.php

, jossa voit oppitunnin 11 mukaisesti vastaanottaa käyttäjän syötteitä pyytämällä lomakkeen sisältöä. Tässä nimenomaisessa tapauksessa SQL-lause voisi olla tällainen:

strSQL = "INSERT INTO people(FirstName) arvot("" . $_POST["Etunimi"] . "")"

Vastaavasti voit pyytää tietoja evästeistä, kyselyjonoistunnoista jne.

Yleisimmät aloittelijan virheet

Aluksi saat todennäköisesti joukon virheilmoituksia, kun yrität päivittää tietokantaa. Kun työskentelet tietokannan kanssa, virheet eivät ole sallittuja. Väärä pilkku voi tarkoittaa, että tietokantaa ei päivitetä ja saat virheilmoituksen. Alla kuvataan yleisimmät virheet.

Virheellinen tietotyyppi

On tärkeää, että sarakkeen tiedot ja tietotyyppi vastaavat toisiaan. Jokainen sarake voi sisältää tietyn tyyppisiä tietoja.

Seuraava kuvakaappaus näyttää esimerkissämme olevan "ihmiset"-taulukon tietotyypit. Jos esimerkiksi yrität lisätä tekstiä tai numeroa tietokenttään, saat virheilmoituksen. Siksi aseta tietotyyppi mahdollisimman tarkasti. Yleisimmät tietotyypit on lueteltu alla:
Merkitys
Tietotyyppi Enintään 255 merkkiä - tai "Pituus"-kohdassa määritetty pituus
TEKSTI
Suuret tekstilohkot tai tekstin ja numeroiden yhdistelmä. Enintään 65 535 merkkiä
INT
Numeeriset tiedot matemaattisia laskelmia varten. 4 tavua
DATE
Päivämäärät muodossa VVV-KK-PP 3 tavua
AIKA
Aika tt:mm:ss-muodossa 3 tavua
DATETIME
Päivämäärä ja aika muodossa VVV-KK-PP tt:mm:ss 8 tavua

SQL-lauseet lainausmerkeillä tai kenoviivalla

Jos yrität lisätä tekstiä, joka sisältää lainausmerkkejä ("), kaksoislainausmerkkejä (") tai kenoviivaa (\), tietuetta ei lisätä tietokantaan. Ratkaisu olisi korvata kenoviiva sellaisten merkkien edessä, jotka on muistettava, kun ne lisätään tietokantakyselyihin.

Tässä artikkelissa tarkastellaan, kuinka PHP:n avulla lisätään rivejä MySQL-tietokantaan.

Vaihe 1 - Luo taulukko

Ensin sinun on luotava taulukko tiedoille. Tämä on yksinkertainen toimenpide, joka voidaan tehdä käyttämällä phpMyAdminia hosting-ohjauspaneelissasi.

Kun olet kirjautunut phpMyAdminiin, näet tämän käyttöliittymän:
Luodaan u266072517_name-tietokantaan taulukko nimeltä Opiskelijat napsauttamalla "Luo taulukko" -painiketta. Tämän jälkeen näemme uuden sivun, jolla asetamme kaikki tarvittavat taulukkoparametrit:

Tämä on yksinkertaisin asetus, jota voidaan käyttää taulukossa ja saada lisätietoja taulukon/tietokantarakenteesta.

Sarakevaihtoehdot:

  • Nimi on sarakkeen nimi, joka näkyy taulukon yläosassa.
  • Tyyppi — saraketyyppi. Valitsimme esimerkiksi varcharin, koska syötämme merkkijonoarvoja.
  • Pituus/arvot - Käytetään määrittämään tämän sarakkeen merkinnän enimmäispituus.
  • Hakemisto - Käytimme "Ensisijainen"-indeksiä "ID"-kentässä. Taulukkoa luotaessa on suositeltavaa käyttää vain yhtä saraketta ensisijaisena avaimena. Sitä käytetään taulukon tietueiden luetteloimiseen, ja sitä tarvitaan taulukkoa laadittaessa. Huomasin myös "A_I", joka tarkoittaa "Auto Increment" - parametri tietuenumeroiden (1,2,3,4...) automaattiseen määrittämiseen.
    Napsauta "Tallenna" -painiketta ja taulukko luodaan.

Vaihe 2: Kirjoita PHP-koodi tietojen lisäämiseksi MySQL:ään.

Vaihtoehto 1 - MySQLi-menetelmä

Ensin sinun on muodostettava yhteys tietokantaan. Tämän jälkeen käytämme SQL INSERT -kyselyä. Esimerkki koko koodista:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Koodin ensimmäinen osa (rivit 3 - 18) on tarkoitettu yhteyden muodostamiseen tietokantaan.

Aloitetaan rivistä 19:

$sql = "INSERT INTO Opiskelijat (nimi, sukunimi, sähköpostiosoite) ARVOT ("Thom", "Vial", " [sähköposti suojattu]")";

Se lisää tiedot MySQL-tietokantaan. INSERT INTO on käsky, joka lisää tietoja määritettyyn taulukkoon. Esimerkissämme tiedot lisätään Opiskelijat-taulukkoon.

Seuraavassa on luettelo sarakkeista, joihin arvot lisätään: nimi, sukunimi, sähköpostiosoite. Tiedot lisätään määritetyssä järjestyksessä. Jos olisimme kirjoittaneet (sähköposti, sukunimi, nimi), arvot olisi lisätty eri järjestyksessä.

Seuraava osa on ARVOT-lause. Tässä määritämme sarakkeiden arvot: nimi = Thom, sukunimi = Vial, email = [sähköposti suojattu].

Suoritimme pyynnön PHP-koodilla. Ohjelmakoodissa SQL-kyselyt on syötettävä lainausmerkeillä. Seuraava koodinpätkä (rivi 20-22) tarkistaa, onnistuiko pyyntömme:

if (mysqli_query($conn, $sql)) ( echo "Uusi tietue luotu onnistuneesti"; )

Tämä koodi näyttää viestin, joka osoittaa, että pyyntö onnistui.

Ja viimeinen osa (rivit 22 - 24) näyttää ilmoituksen, jos pyyntö ei onnistunut:

else ( echo "Virhe: " . $sql . "
" . mysqli_error($conn); )

Vaihtoehto 2 - PHP Data Object (PDO) -menetelmä

Ensin meidän on muodostettava yhteys tietokantaan luomalla uusi PDO-objekti. Kun työskentelemme sen kanssa, käytämme erilaisia ​​SAN-menetelmiä. Objektimenetelmiä kutsutaan seuraavasti:

$the_Object->the_Method();

PDO:n avulla voit "valmistella" SQL-koodin ennen sen suorittamista. SQL-kysely arvioidaan ja "korjataan" ennen suorittamista. Esimerkiksi yksinkertainen SQL-injektiohyökkäys voidaan suorittaa syöttämällä SQL-koodi lomakekenttään. Esimerkiksi:

Koska tämä on syntaktisesti oikea SQL, puolipiste tekee DROP DATABASE user_tablesta uuden SQL-kyselyn ja käyttäjätaulukko hylätään. Valmistetut lausekkeet (sidotut muuttujat) eivät salli puolipisteiden ja lainausmerkkien lopettaa alkuperäistä kyselyä. Siksi DROP DATABASE -komentoa ei koskaan suoriteta.

Valmisteltujen lausekkeiden käyttämiseksi sinun on kirjoitettava uusi muuttuja, joka kutsuu tietokantaobjektin preparat()-menetelmää.

Oikea koodi:

getMessage(); ) // Aseta muuttujat henkilölle, jonka haluamme lisätä tietokantaan $first_Name = "Thom"; $last_Name = "Injektiopullo"; $sähköposti = " [sähköposti suojattu]"; // Luo muuttuja, joka kutsuu tietokantaobjektin ready()-metodia // SQL-kysely, jonka haluat suorittaa, syötetään parametriksi ja paikkamerkit kirjoitetaan seuraavasti: placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare(" INSERT INTO Opiskelijat ( nimi, sukunimi, sähköpostiosoite) ARVOT (:etunimi, :sukunimi, :sähköposti)"); // Kerromme nyt skriptille, mikä muuttuja viittaa kuhunkin paikkamerkkiin käyttää bindParam()-metodia // Ensimmäinen parametri on yllä olevan käskyn paikkamerkki, toinen on muuttuja, jonka tulee viitata $my_Insert_Statement->bindParam(:first_name, $first_Name->bindParam(:last_name, $last_Name) // Suorita kysely käyttämällä dataa juuri määritelty // Metodi execute() palauttaa TRUE jos onnistuu ja FALSE jos ei, jolloin voit tulostaa oman if-viestin ($my_Insert_Statement->execute()) ( echo "Uusi tietue luotu onnistui"; ) else ( echo "Tietuetta ei voida luoda"; ) // Tässä vaiheessa voit muuttaa muuttujan tietoja ja suorittaa kyselyn lisätäksesi tietoja tietokannan tietoihin $first_Name = "John"; $last_Name = "Smith"; $sähköposti = " [sähköposti suojattu]"; $my_Insert_Statement->execute(); // Suorita uudelleen, kun muuttujaa muutetaan if ($my_Insert_Statement->execute()) ( echo "Uusi tietue luotiin onnistuneesti"; ) else ( echo "Tietuetta ei voida luoda";

Riveillä 28, 29 ja 30 käytämme tietokantaobjektin bindParam()-metodia. On myös bindValue()-menetelmä, joka eroaa suuresti edellisestä.

  • bindParam() - Tämä menetelmä arvioi tiedot, kun execute()-metodi saavutetaan. Kun komentosarja saavuttaa ensimmäisen kerran execute()-menetelmän, se näkee, että $first_Name vastaa sanaa "Thom". Sitten sitoo tämän arvon ja suorittaa pyynnön. Kun komentosarja saavuttaa toisen execute()-menetelmän, se näkee, että $first_Name vastaa nyt "John". Sitten se sitoo tämän arvon ja suorittaa kyselyn uudelleen uusilla arvoilla. On tärkeää muistaa, että olemme määrittäneet kyselyn kerran ja käyttäneet sitä uudelleen eri tietojen kanssa skriptin eri kohdissa.
  • bindValue() - Tämä menetelmä arvioi tiedot, kun bindValue() on saavutettu. Koska $first_Name asetettiin arvoon "Thom", kun bindValue() saavutetaan, sitä käytetään aina, kun execute()-menetelmää kutsutaan $my_Insert_Statementissa.
    Huomaa, että käytämme muuttujaa $first_Name uudelleen ja annamme sille uuden arvon toisen kerran. Skriptin suorittamisen jälkeen molemmat nimet näkyvät tietokannassa huolimatta siitä, että skriptin lopussa olevan $first_Name-muuttujan arvo on ”John”. Muista, että PHP tarkistaa koko skriptin ennen sen suorittamista.

Jos päivität komentosarjan korvaamaan bindParam bindValueella, lisäät "Thom Vial" tietokantaan kahdesti ja John Smith ohitetaan.

Vaihe 3 - Vahvista onnistuminen ja ratkaise ongelmat

Jos pyyntö lisätä rivejä tietokantaan onnistui, näemme seuraavan viestin:

Yleisten virheiden vianmääritys

MySQLi

Muussa tapauksessa näyttöön tulee virheilmoitus. Tehdään esimerkiksi yksi syntaksivirhe koodiin ja saamme seuraavan:

Koodin ensimmäinen osa on kunnossa, yhteys muodostettiin onnistuneesti, mutta SQL-kysely epäonnistui.

"Virhe: INSERT INTO Opiskelijat (nimi, sukunimi, sähköpostiosoite) VALUES ("Thom", "Vial", " [sähköposti suojattu]") Sinulla on virhe SQL-syntaksissa. Tarkista MySQL-palvelimen versiota vastaavasta käsikirjasta käytettävä syntaksia lähellä "(nimi, sukunimi, sähköpostiosoite) VALUES ("Thom", "Vial", " [sähköposti suojattu]")" rivillä 1"

Syntaksivirhe aiheutti komentosarjan kaatumisen. Virhe oli tässä:

$sql = "INSERT INTO Opiskelijat (nimi, sukunimi, sähköpostiosoite) ARVOT ("Thom", "Vial", " [sähköposti suojattu]")";

Käytimme kiharat housunkannattimet tavallisten sijasta. Tämä on väärin ja komentosarja loi syntaksivirheen.

SAN

PDO-yhteyden rivi 7 asettaa virhetilan "näytä kaikki poikkeukset". Jos asetetaan eri arvo ja pyyntö epäonnistuu, emme saa virheilmoituksia.

Tätä asetusta tulee käyttää vain skriptiä kehitettäessä. Kun se on aktivoitu, tietokantojen ja taulukoiden nimet saattavat näkyä, jotka on turvasyistä parhaiten piilotettu. Yllä kuvatussa tapauksessa, kun käytettiin kiharaa henkselia tavallisten henkselien sijaan, virheilmoitus näyttää tältä:

Vakava virhe: Uncaughtexception "PDOException" ja viesti "SQLSTATE: Syntax error or accessviolation: 1064 SQL-syntaksissasi on virhe; tarkista MySQL-palvelimesi versiota vastaavasta käsikirjasta oikeussyntaksi, jota käytetään lähellä "(nimi, sukunimi, sähköpostiosoite) VALUES ("Thom", "Vial", " [sähköposti suojattu]")" rivillä 1"

Muita mahdollisia ongelmia:

  • Sarakkeet on määritetty väärin (olemattomia sarakkeita tai väärin kirjoitetut sarakkeiden nimet).
  • Yksi arvotyyppi on määritetty toisen tyyppiselle sarakkeelle. Jos esimerkiksi yrität lisätä numeron 47 Nimi-sarakkeeseen, saat virheilmoituksen. Tässä sarakkeessa on käytettävä merkkijonoarvoa. Mutta jos määrittäisimme luvun lainausmerkeissä (esimerkiksi "47"), se toimisi, koska se on merkkijono.
  • Tietoja yritettiin syöttää taulukkoon, jota ei ole olemassa. Taulukon nimessä oli myös kirjoitusvirhe.

Kun tiedot on syötetty onnistuneesti, näemme, että ne on lisätty tietokantaan. Alla on esimerkki taulukosta, johon on lisätty tietoja.

Johtopäätös

Tässä artikkelissa olemme kertoneet, kuinka PHP:n avulla voidaan lisätä tietoja MySQL-tietokantaan käyttämällä MySQLiä ja SAN. Ja myös kuinka poistaa yleiset virheet. Tästä tiedosta on hyötyä ohjelmointia opiskellessa ja omaa verkkosivustoasi kehitettäessä.

Tämä julkaisu on käännös artikkelista " Kuinka käyttää PHP:tä tietojen lisäämiseen MySQL-tietokantaan", jonka on valmistellut ystävällinen projektitiimi


Oppitunti perustuu palautelomake, tarvitaan lähes kaikilla verkkosivuilla.

Vaihe yksi: Tietokannan luominen sisään MySQL

Avaaminen phpMyAdmin(sisältyy peruspakettiin Denwer`a) ja luo tietokanta nimeltä " test_base", valitse koodaus" cp1251_general_ci".

Vaihe kaksi: Luodaan taulukko sisään MySQL käyttämällä SQL-kysely

Voit tietysti luoda taulukon vakiotyökaluilla phpMyAdmin, mutta näin luotavan taulukon rakenne tulee selkeästi näkyviin.

Luo taulukko nimeltä " testi_taulukko" ja kuusi kenttää nimeltä:
"nimi" - käyttäjänimet tallennetaan tähän;
"email" - käyttäjien sähköpostiosoitteet tallennetaan tähän;
"teema" - viestin aihe tallennetaan tähän;
"viesti" - viestit tallennetaan tähän;
"data" - viestin lähetyspäivä tallennetaan tähän;
"id" - tietueen tunnistenumero (rivi), avainkenttä.

SQL-kysely:
luo taulukko test_table(
id int(11) ei null auto_increment,
nimi varchar(255) ei ole tyhjä,
sähköposti varchar(255) not null,
teema varchar(255) ei ole tyhjä,
viestin teksti ei ole tyhjä,
tietojen päivämäärä ei ole tyhjä,
ensisijainen avain (id)
);

Vaihe kolme: Lomakkeen luominen

index.html:

Lomake tallennettu MySQL:ään

Esimerkki lomakkeesta, jossa tietoja tallennetaan MySQL:ssä

























Pyynnön lähettäminen
Nimi:
Sähköposti:
Viestin aihe:
Viesti:


























Vaihe neljä: Lomakkeen käsittelijän luominen " save_form.php" tallentamalla vastaanotetut tiedot sisään MySQL

save_form.php:





/* MySQL-taulukko, johon tiedot tallennetaan */
$taulukko = "testitaulukko";

/* Luo yhteys */

/* Määritä nykyinen päivämäärä */
$cdate = päivämäärä("Y-m-d");

/* Luomme kyselyn tietojen lisäämiseksi taulukkoon
nimi...päivämäärä - tietokannan tiettyjen kenttien nimi;
$_POST["testin_nimi"]... $_POST["test_mess"] - nämä muuttujat sisältävät lomakkeesta */ saadut tiedot
$query = "INSERT INTO $table SET name="".$_POST["testin_nimi"].", email="".$_POST["test_mail"].",
theme="".$_POST["test_theme"].", message="".$_POST["testi_sotku"].", data="$cdate"";

/* Sulje yhteys */
mysql_close();

/* Jos tallennus onnistuu, näytä viesti ja paluulinkki */
kaiku("


Tietojen tallennus onnistui!



Mene takaisin
");

Vaihe viisi: Näytetään tallennetut tiedot" view_data.php"

view_data.php:

/* Yhdistä tietokantaan */
$hostname = "paikallinen isäntä"; // palvelimen nimi/polku, MySQL:llä
$käyttäjänimi = "juuri"; // käyttäjätunnus (Denwerissä oletus on "root")
$salasana = ""; // käyttäjän salasana (Denwerissä ei ole oletuksena salasanaa, tämä parametri voidaan jättää tyhjäksi)
$dbName = "testikanta"; // tietokannan nimi


$taulukko = "testitaulukko";

/* Luo yhteys */
mysql_connect($isäntänimi, $käyttäjänimi, $salasana) or die("Yhteyttä ei voi luoda");

/* Valitse tietokanta. Jos tapahtuu virhe, näytä se */
mysql_select_db($dbName) tai kuole (mysql_error());

/* Luomme kyselyn tietojen poimimiseksi kentistä "nimi", "sähköposti", "teema",
"message", "data" taulukot "test_table" */
$query = "VALITSE ID, nimi, sähköposti, teema, viesti, tiedot $taulukosta";

/* Suorita pyyntö. Jos tapahtuu virhe, näytä se. */


kaiku("

Datan tulostaminen MySQL:stä

Aiemmin tallennettujen tietojen tulostaminen MySQL-taulukosta










");



kaiku"

\n";
kaiku" \n";
kaiku" \n";
kaiku" \n";
kaiku" \n";
kaiku" \n";
kaiku" \n\n";
}

Kaiku("

# Pääsyn päivämäärä Käyttäjätunnukset Käyttäjien sähköposti Viestin aihe Käyttäjien viestit
".$row["id"]."".$row["data"]."".$row["nimi"]."".$row["sähköposti"]."".$row["teema"]."".$row["viesti"]."
\n");

/* Sulje yhteys */
mysql_close();

Vaihe kuusi: Tietueiden poistaminen tietokannasta" del_data.php"

del_data.php:

/* Yhdistä tietokantaan */
$hostname = "paikallinen isäntä"; // palvelimen nimi/polku, MySQL:llä
$käyttäjänimi = "juuri"; // käyttäjätunnus (Denwerissä oletus on "root")
$salasana = ""; // käyttäjän salasana (Denwerissä ei ole oletuksena salasanaa, tämä parametri voidaan jättää tyhjäksi)
$dbName = "testikanta"; // tietokannan nimi

/* MySQL-taulukko, johon tiedot on tallennettu */
$taulukko = "testitaulukko";

/* Luo yhteys */
mysql_connect($isäntänimi, $käyttäjänimi, $salasana) or die("Yhteyttä ei voi luoda");

/* Valitse tietokanta. Jos tapahtuu virhe, näytä se */
mysql_select_db($dbName) tai kuole (mysql_error());

/* Jos poistolinkkiä napsautettiin, poista merkintä */
$del = $query = "poista $taulukosta missä (id="$del"");
/* Suorita pyyntö. Jos tapahtuu virhe, näytä se. */
mysql_query($kysely) tai die(mysql_error());



/* Suorita pyyntö. Jos tapahtuu virhe, näytä se. */
$res = mysql_query($query) tai kuole(mysql_error());

$rivi = mysql_num_rows($res);

/* Tulostustiedot taulukosta */
kaiku("

Tietojen tulostaminen ja poistaminen MySQL:stä

Aiemmin tallennettujen tietojen tulostaminen ja poistaminen MySQL-taulukosta











");

/* Tiettyjen kenttien tietokannan tietojen tulostusjakso */
while ($rivi = mysql_fetch_array($res)) (
kaiku"

\n";
kaiku" \n";
kaiku" \n";
kaiku" \n";
kaiku" \n";
kaiku" \n";
kaiku" \n";
/* Luo linkki kentän poistamiseksi */
kaiku" \n";
kaiku"\n";
}

Kaiku("

# Pääsyn päivämäärä Käyttäjätunnukset Käyttäjien sähköposti Viestin aihe Käyttäjien viestit Poistaminen
".$row["id"]."".$row["data"]."".$row["nimi"]."".$row["sähköposti"]."".$row["teema"]."".$row["viesti"]."Poistaa
\n");

/* Sulje yhteys */
mysql_close();

Vaihe seitsemän: Tietueiden muokkaaminen ja päivittäminen tietokannassa " update_data.php"

update_data.php:

/* Yhdistä tietokantaan */
$hostname = "paikallinen isäntä"; // palvelimen nimi/polku, MySQL:llä
$käyttäjänimi = "juuri"; // käyttäjätunnus (Denwerissä oletus on "root")
$salasana = ""; // käyttäjän salasana (Denwerissä ei ole oletuksena salasanaa, tämä parametri voidaan jättää tyhjäksi)
$dbName = "testikanta"; // tietokannan nimi

/* MySQL-taulukko, johon tiedot on tallennettu */
$taulukko = "testitaulukko";

/* Luo yhteys */
mysql_connect($isäntänimi, $käyttäjänimi, $salasana) or die("Yhteyttä ei voi luoda");

/* Valitse tietokanta. Jos tapahtuu virhe, näytä se */
mysql_select_db($dbName) tai kuole (mysql_error());

/* Jos muokkauspainiketta painettiin, tee muutokset */
if(@$submit_edit) (
$query = "PÄIVITYS $table SET name="$test_name", email="$test_mail", theme="$test_theme", message="$test_mess" WHERE id="$päivitys"";
/* Suorita pyyntö. Jos tapahtuu virhe, näytä se. */
mysql_query($query) tai kuole (mysql_error());
}

/* Laitamme koko tietokannan $res-muuttujaan */
$query = "VALITSE * $taulukosta";
/* Suorita pyyntö. Jos tapahtuu virhe, näytä se. */
$res = mysql_query($query) tai kuole(mysql_error());
/* Selvitä tietokannan tietueiden lukumäärä */
$rivi = mysql_num_rows($res);

/* Tulostustiedot taulukosta */
kaiku("

Tietojen muokkaaminen ja päivittäminen

Tietojen muokkaaminen ja päivittäminen MySQL-taulukossa


");

/* Tiettyjen kenttien tietokannan tietojen tulostusjakso */
while ($rivi = mysql_fetch_array($res)) (
kaiku"

\n";
kaiku" \n";
kaiku" \n";
kaiku" \n";
kaiku" \n";
kaiku"\n";
kaiku" \n";
kaiku"\n";
kaiku" \n";
kaiku"\n";
kaiku" \n";
kaiku"\n";
kaiku" \n";
kaiku"\n";
kaiku" \n";
kaiku"
#".$row["id"]."
".$row["data"]."
Käyttäjätunnus:
Käyttäjän sähköpostiosoite:
Viestin aihe:
Viesti:
\n\n";
}

/* Sulje yhteys */
mysql_close();

No siinä kaikki, hyvää koodausta:1133:

_________________________________

Tässä artikkelissa tarkastelemme ehkä joitain tärkeimmistä SQL-kyselyt. Tämä kyselyt tietueiden lisäämiseksi ja poistamiseksi tietokantataulukosta. Koska ERITTÄIN usein sinun täytyy lisää uusia tietueita taulukkoon, ja tee se automaattisesti, tämä materiaali on tutkittava.

Aluksi SQL-kysely uuden tietueen lisäämiseksi taulukkoon:

INSERT INTO käyttäjät (kirjautuminen, pass) arvot ("TestUser", "123456")

Kun lisäät merkintää, komento " INSERT INTO", sitten sen taulukon nimi, johon lisäämme tietueen. Seuraavaksi tulee suluissa niiden kenttien nimet, jotka haluamme täyttää. Ja sitten sulkeissa sanan " arvot"Alamme listata valitsemiemme kenttien arvot. Tämän kyselyn suorittamisen jälkeen taulukkoomme tulee uusi merkintä.

Joskus vaaditaan päivitä taulukkomerkintä, tätä varten on seuraava SQL-kysely:

PÄIVITYS käyttäjien SET login = "TestUser2", pass="1234560" WHERE login="TestUser"

Tämä kysely on monimutkaisempi, koska sen rakenne on " JOSSA", mutta siitä lisää alla. Ensin tulee komento " PÄIVITTÄÄ", sitten taulukon nimi ja sen jälkeen " SARJA"kuvaamme kaikkien niiden kenttien arvot, joita haluamme muuttaa. Se olisi yksinkertaista, mutta herää kysymys: " Mikä tietue pitäisi päivittää?". Siksi on olemassa" JOSSA". Tässä tapauksessa päivitämme tietueen, kentän " kirjaudu sisään"millä on väliä" TestUser Huomaa, että jos tällaisia ​​tietueita on useita, niin ehdottomasti kaikki päivitetään! Tämä on erittäin tärkeää ymmärtää, muuten saatat menettää pöytäsi.

Puhutaanpa vähän lisää aiheesta" JOSSA". Yksinkertaisten tasa-arvotarkistusten lisäksi on myös epätasa-arvoja sekä loogisia operaatioita: JA Ja TAI.

PÄIVITYS käyttäjien SET kirjautumistunnus = "TestUser2", pass="1234560" WHERE id< 15 AND login="TestUser"

Annettu SQL-kysely päivittää nämä tiedot, id joita on vähemmän 15 JA kenttä" kirjaudu sisään"asiat" TestUser"Toivottavasti ymmärrät suunnittelun" JOSSA"koska se on erittäin tärkeää. Aivan" JOSSA"käytetty kun tietueiden hakeminen taulukoista, ja tämä on useimmin käytetty tehtävä tietokantojen kanssa työskennellessä.

Ja lopuksi yksinkertainen SQL-kysely tietueiden poistamiseksi taulukosta:

POISTA käyttäjiltä WHERE login="TestUser2"

komennon jälkeen " POISTA LÄHTEESTÄ" on sen taulukon nimi, josta haluat poistaa tietueita. Seuraavaksi kuvataan "WHERE"-rakenne. Jos tietue täyttää kuvatut ehdot, se poistetaan. Kiinnitä jälleen huomiota, riippuen tietueiden määrästä, jotka täyttävät tila sen jälkeen" JOSSA", mikä tahansa määrä niistä voidaan poistaa.