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:
?>
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ä